Merge remote-tracking branch 'upstream/main' into UI-TaskPanels-cleanup-1
2
.github/ISSUE_TEMPLATE/PROBLEM_REPORT.yml
vendored
@@ -32,8 +32,8 @@ body:
|
||||
label: Subproject(s) affected?
|
||||
options:
|
||||
- Addon Manager
|
||||
- Arch
|
||||
- Assembly
|
||||
- BIM/Arch
|
||||
- CAM/Path
|
||||
- Core
|
||||
- Draft
|
||||
|
||||
4
.github/labels.yml
vendored
@@ -18,9 +18,9 @@ Materials:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['src/Mod/Material/**/*']
|
||||
|
||||
WB Arch:
|
||||
WB BIM:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['src/Mod/Arch/**/*']
|
||||
- any-glob-to-any-file: ['src/Mod/BIM/**/*']
|
||||
|
||||
WB Assembly:
|
||||
- changed-files:
|
||||
|
||||
@@ -17,7 +17,7 @@ macro(CheckInterModuleDependencies)
|
||||
endif(${dependent})
|
||||
endfunction(REQUIRES_MODS)
|
||||
|
||||
REQUIRES_MODS(BUILD_ARCH BUILD_PART BUILD_MESH BUILD_DRAFT)
|
||||
REQUIRES_MODS(BUILD_BIM BUILD_PART BUILD_MESH BUILD_DRAFT)
|
||||
REQUIRES_MODS(BUILD_DRAFT BUILD_SKETCHER)
|
||||
REQUIRES_MODS(BUILD_DRAWING BUILD_PART BUILD_SPREADSHEET)
|
||||
REQUIRES_MODS(BUILD_FEM BUILD_PART)
|
||||
|
||||
@@ -104,7 +104,7 @@ macro(InitializeFreeCADBuildOptions)
|
||||
option(BUILD_SANDBOX "Build the FreeCAD Sandbox module which is only for testing purposes" OFF)
|
||||
option(BUILD_TEMPLATE "Build the FreeCAD template module which is only for testing purposes" OFF)
|
||||
option(BUILD_ADDONMGR "Build the FreeCAD addon manager module" ON)
|
||||
option(BUILD_ARCH "Build the FreeCAD Architecture module" ON)
|
||||
option(BUILD_BIM "Build the FreeCAD BIM module" ON)
|
||||
option(BUILD_DRAFT "Build the FreeCAD draft module" ON)
|
||||
option(BUILD_DRAWING "Build the FreeCAD drawing module" OFF)
|
||||
option(BUILD_HELP "Build the FreeCAD help module" ON)
|
||||
|
||||
@@ -89,7 +89,7 @@ macro(PrintFinalReport)
|
||||
value(FREECAD_USE_PYBIND11)
|
||||
value(FREECAD_USE_EXTERNAL_KDL)
|
||||
value(BUILD_ADDONMGR)
|
||||
value(BUILD_ARCH)
|
||||
value(BUILD_BIM)
|
||||
value(BUILD_ASSEMBLY)
|
||||
value(BUILD_CLOUD)
|
||||
value(BUILD_DRAFT)
|
||||
|
||||
@@ -262,7 +262,9 @@ MACRO(PYSIDE_WRAP_RC outfiles)
|
||||
# we follow the tool command with in-place sed.
|
||||
ADD_CUSTOM_COMMAND(OUTPUT "${outfile}"
|
||||
COMMAND "${PYSIDE_RCC_EXECUTABLE}" ${RCCOPTIONS} "${infile}" ${PY_ATTRIBUTE} -o "${outfile}"
|
||||
COMMAND sed "/^# /d" "${outfile}" >"${outfile}.tmp" && mv "${outfile}.tmp" "${outfile}"
|
||||
# The line below sometimes catches unwanted lines too - but there is no date in the file
|
||||
# anymore with Qt5 RCC, so commenting it out for now...
|
||||
#COMMAND sed "/^# /d" "${outfile}" >"${outfile}.tmp" && mv "${outfile}.tmp" "${outfile}"
|
||||
MAIN_DEPENDENCY "${infile}"
|
||||
)
|
||||
endif()
|
||||
|
||||
2
src/3rdParty/OndselSolver
vendored
@@ -2027,6 +2027,7 @@ void Application::initTypes()
|
||||
App::PropertyMagneticFluxDensity ::init();
|
||||
App::PropertyMagnetization ::init();
|
||||
App::PropertyMass ::init();
|
||||
App::PropertyMoment ::init();
|
||||
App::PropertyPressure ::init();
|
||||
App::PropertyPower ::init();
|
||||
App::PropertyShearModulus ::init();
|
||||
|
||||
@@ -555,6 +555,17 @@ PropertyMass::PropertyMass()
|
||||
setUnit(Base::Unit::Mass);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// PropertyMoment
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
TYPESYSTEM_SOURCE(App::PropertyMoment, App::PropertyQuantity)
|
||||
|
||||
PropertyMoment::PropertyMoment()
|
||||
{
|
||||
setUnit(Base::Unit::Moment);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// PropertyPressure
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
@@ -540,6 +540,19 @@ public:
|
||||
~PropertyMass() override = default;
|
||||
};
|
||||
|
||||
/** Moment property
|
||||
* This is a property for representing moment. It is basically a float
|
||||
* property. On the Gui it has a quantity like N*m.
|
||||
*/
|
||||
class AppExport PropertyMoment: public PropertyQuantity
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
|
||||
public:
|
||||
PropertyMoment();
|
||||
~PropertyMoment() override = default;
|
||||
};
|
||||
|
||||
/** Pressure property
|
||||
* This is a property for representing pressure. It basically a float
|
||||
* property. On the Gui it has a quantity like Pa.
|
||||
|
||||
@@ -623,6 +623,9 @@ QString Unit::getTypeString() const
|
||||
if (*this == Unit::YoungsModulus) {
|
||||
return QString::fromLatin1("YoungsModulus");
|
||||
}
|
||||
if (*this == Unit::Moment) {
|
||||
return QString::fromLatin1("Moment");
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
@@ -664,6 +667,7 @@ const Unit Unit::MagneticFieldStrength (-1,0,0,1);
|
||||
const Unit Unit::MagneticFlux (2,1,-2,-1);
|
||||
const Unit Unit::MagneticFluxDensity (0,1,-2,-1);
|
||||
const Unit Unit::Magnetization (-1,0,0,1);
|
||||
const Unit Unit::Moment (2, 1, -2);
|
||||
const Unit Unit::Pressure (-1,1,-2);
|
||||
const Unit Unit::Power (2, 1, -3);
|
||||
const Unit Unit::ShearModulus (-1,1,-2);
|
||||
|
||||
@@ -155,6 +155,7 @@ public:
|
||||
static const Unit Force;
|
||||
static const Unit Work;
|
||||
static const Unit Power;
|
||||
static const Unit Moment;
|
||||
|
||||
static const Unit SpecificEnergy;
|
||||
static const Unit ThermalConductivity;
|
||||
|
||||
@@ -272,6 +272,24 @@ UnitsSchemaInternal::schemaTranslate(const Quantity& quant, double& factor, QStr
|
||||
factor = 1e9;
|
||||
}
|
||||
}
|
||||
// else if (unit == Unit::Moment) {
|
||||
// if (UnitValue < 1e6) {
|
||||
// unitString = QString::fromLatin1("mNm");
|
||||
// factor = 1e3;
|
||||
// }
|
||||
// else if (UnitValue < 1e9) {
|
||||
// unitString = QString::fromLatin1("Nm");
|
||||
// factor = 1e6;
|
||||
// }
|
||||
// else if (UnitValue < 1e12) {
|
||||
// unitString = QString::fromLatin1("kNm");
|
||||
// factor = 1e9;
|
||||
// }
|
||||
// else {
|
||||
// unitString = QString::fromLatin1("MNm");
|
||||
// factor = 1e12;
|
||||
// }
|
||||
// }
|
||||
else if (unit == Unit::Power) {
|
||||
if (UnitValue < 1e6) {
|
||||
unitString = QString::fromLatin1("mW");
|
||||
|
||||
@@ -261,6 +261,24 @@ QString UnitsSchemaMKS::schemaTranslate(const Quantity& quant, double& factor, Q
|
||||
factor = 1e9;
|
||||
}
|
||||
}
|
||||
// else if (unit == Unit::Moment) {
|
||||
// if (UnitValue < 1e6) {
|
||||
// unitString = QString::fromLatin1("mNm");
|
||||
// factor = 1e3;
|
||||
// }
|
||||
// else if (UnitValue < 1e9) {
|
||||
// unitString = QString::fromLatin1("Nm");
|
||||
// factor = 1e6;
|
||||
// }
|
||||
// else if (UnitValue < 1e12) {
|
||||
// unitString = QString::fromLatin1("kNm");
|
||||
// factor = 1e9;
|
||||
// }
|
||||
// else {
|
||||
// unitString = QString::fromLatin1("MNm");
|
||||
// factor = 1e12;
|
||||
// }
|
||||
// }
|
||||
else if (unit == Unit::Power) {
|
||||
if (UnitValue < 1e6) {
|
||||
unitString = QString::fromLatin1("mW");
|
||||
|
||||
@@ -19,6 +19,7 @@ Bas Ruigrok (Rexbas)
|
||||
bejant
|
||||
Benjamin Alterauge
|
||||
Bernd Hahnebach
|
||||
bgbsww
|
||||
blobfish (tanderson69)
|
||||
bluecd
|
||||
Brad Collette (sliptonic)
|
||||
|
||||
@@ -627,9 +627,10 @@ WorkbenchGroup::WorkbenchGroup ( Command* pcCmd, QObject * parent )
|
||||
this, &WorkbenchGroup::onWorkbenchActivated);
|
||||
}
|
||||
|
||||
QAction* WorkbenchGroup::getOrCreateAction(const QString& wbName) {
|
||||
QAction* WorkbenchGroup::getOrCreateAction(const QString& wbName)
|
||||
{
|
||||
if (!actionByWorkbenchName.contains(wbName)) {
|
||||
actionByWorkbenchName[wbName] = new QAction;
|
||||
actionByWorkbenchName[wbName] = new QAction(QApplication::instance());
|
||||
}
|
||||
|
||||
return actionByWorkbenchName[wbName];
|
||||
|
||||
@@ -2,118 +2,85 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg1306"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="Feature.svg"
|
||||
inkscape:export-filename="D:\Develop\Projekte\FreeCAD\FreeCAD_0.3\src\Gui\Icons\Feature.png"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs1308" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.5494505"
|
||||
inkscape:cx="72.683765"
|
||||
inkscape:cy="35.721387"
|
||||
inkscape:current-layer="g2989"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2987"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata1311">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,48)">
|
||||
<g
|
||||
id="g2989"
|
||||
transform="matrix(4.7497799,0,0,4.7497799,-3.7219756,-54.025163)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1316"
|
||||
d="m 5.3216464,5.2686995 c -3.485356,0 -3.485356,0 -3.485356,0 l 0,0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:1.26321638;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1318"
|
||||
d="m 5.3031397,7.3627233 c -3.485356,0 -3.485356,0 -3.485356,0 l 0,0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:1.26321638;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1320"
|
||||
d="m 5.3031397,9.468084 c -3.485356,0 -3.485356,0 -3.485356,0 l 0,0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:1.26321638;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1322"
|
||||
d="m 13.205238,3.5844109 c -3.4853557,0 -3.4853557,0 -3.4853557,0 l 0,0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:1.26321638;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1316-3"
|
||||
d="m 5.3216466,5.2686995 c -3.4853561,0 -3.4853561,0 -3.4853561,0 l 0,0"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.42107214;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1318-6"
|
||||
d="m 5.3031399,7.3627233 c -3.4853561,0 -3.4853561,0 -3.4853561,0 l 0,0"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.42107214;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1320-7"
|
||||
d="m 5.3031399,9.468084 c -3.4853561,0 -3.4853561,0 -3.4853561,0 l 0,0"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.42107214;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1322-5"
|
||||
d="m 13.205238,3.5844109 c -3.4853556,0 -3.4853556,0 -3.4853556,0 l 0,0"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.42107214;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
y="2.3211944"
|
||||
x="4.3627234"
|
||||
height="11.368948"
|
||||
width="6.316082"
|
||||
id="rect1314"
|
||||
style="fill:#00fe00;fill-opacity:1;stroke:#172a04;stroke-width:0.42107213999999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient13"><stop
|
||||
style="stop-color:#4e9a06;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop13" /><stop
|
||||
style="stop-color:#8ae234;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop14" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient13"
|
||||
id="linearGradient14"
|
||||
x1="47.043949"
|
||||
y1="59"
|
||||
x2="17.043951"
|
||||
y2="5"
|
||||
gradientUnits="userSpaceOnUse" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
id="path9"
|
||||
d="m 21.61553,19.019721 c -16.5277702,0 -16.5277702,0 -16.5277702,0 v 0"
|
||||
style="fill:none;stroke:#0b1e23;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path10"
|
||||
d="m 21.52777,28.950784 c -16.52777,0 -16.52777,0 -16.52777,0 v 0"
|
||||
style="fill:none;stroke:#0b1e23;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path11"
|
||||
d="m 21.52777,38.935614 c -16.52777,0 -16.52777,0 -16.52777,0 v 0"
|
||||
style="fill:none;stroke:#0b1e23;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path12"
|
||||
d="m 59,11.031858 c -16.527768,0 -16.527768,0 -16.527768,0 v 0"
|
||||
style="fill:none;stroke:#0b1e23;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1316"
|
||||
d="m 21.615529,19.019722 c -16.5277697,0 -16.5277697,0 -16.5277697,0 v 0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1318"
|
||||
d="m 21.527769,28.950785 c -16.5277695,0 -16.5277695,0 -16.5277695,0 v 0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1320"
|
||||
d="m 21.527769,38.935614 c -16.5277695,0 -16.5277695,0 -16.5277695,0 v 0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1322"
|
||||
d="m 59,11.031858 c -16.527769,0 -16.527769,0 -16.527769,0 v 0"
|
||||
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1316-3"
|
||||
d="m 21.61553,19.019722 c -16.5277702,0 -16.5277702,0 -16.5277702,0 v 0"
|
||||
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1318-6"
|
||||
d="m 21.52777,28.950785 c -16.52777,0 -16.52777,0 -16.52777,0 v 0"
|
||||
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1320-7"
|
||||
d="m 21.52777,38.935614 c -16.52777,0 -16.52777,0 -16.52777,0 v 0"
|
||||
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
id="path1322-5"
|
||||
d="m 59,11.031858 c -16.527768,0 -16.527768,0 -16.527768,0 v 0"
|
||||
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||
y="5.0409603"
|
||||
x="17.068256"
|
||||
height="53.918079"
|
||||
width="29.951244"
|
||||
id="rect1314"
|
||||
style="fill:#8ae234;fill-opacity:1;stroke:#17230b;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
y="5"
|
||||
x="17.043951"
|
||||
height="54"
|
||||
width="30"
|
||||
id="rect9"
|
||||
style="fill:url(#linearGradient14);fill-opacity:1;stroke:#8ae234;stroke-width:2.00315;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 19.048828,7.0039062 H 45.041016 V 56.996094 H 19.048828 Z"
|
||||
transform="matrix(0.99837484,0,0,0.99848294,0.05200466,0.04854561)" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 5.1 KiB |
@@ -1,67 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg97" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs3">
|
||||
<radialGradient id="radialGradient6719" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" r="117.14"/>
|
||||
<linearGradient id="linearGradient5060">
|
||||
<stop id="stop5062" offset="0"/>
|
||||
<stop id="stop5064" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient6717" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" r="117.14"/>
|
||||
<linearGradient id="linearGradient6715" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" y1="366.65" x1="302.86">
|
||||
<stop id="stop5050" stop-opacity="0" offset="0"/>
|
||||
<stop id="stop5056" offset=".5"/>
|
||||
<stop id="stop5052" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient238" gradientUnits="userSpaceOnUse" cy="37.518" cx="20.706" gradientTransform="matrix(1.055 -.027345 .17770 1.1909 -3.5722 -7.1253)" r="30.905">
|
||||
<stop id="stop1790" stop-color="#202020" offset="0"/>
|
||||
<stop id="stop1791" stop-color="#b9b9b9" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient491" y2="66.834" gradientUnits="userSpaceOnUse" x2="9.8981" gradientTransform="matrix(1.5168 0 0 .70898 -.87957 -1.3182)" y1="13.773" x1="6.2298">
|
||||
<stop id="stop3984" stop-color="#fff" stop-opacity=".87629" offset="0"/>
|
||||
<stop id="stop3985" stop-color="#fffffe" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient322" y2="46.689" gradientUnits="userSpaceOnUse" x2="12.854" gradientTransform="matrix(1.3175 0 0 .81626 -.87957 -1.3182)" y1="32.567" x1="13.036">
|
||||
<stop id="stop320" stop-color="#fff" offset="0"/>
|
||||
<stop id="stop321" stop-color="#fff" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3104" y2="6.1803" gradientUnits="userSpaceOnUse" x2="15.515" y1="31.368" x1="18.113">
|
||||
<stop id="stop3098" stop-color="#424242" offset="0"/>
|
||||
<stop id="stop3100" stop-color="#777" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient9772" y2="32.05" gradientUnits="userSpaceOnUse" x2="22.065" y1="36.988" x1="22.176">
|
||||
<stop id="stop9768" stop-color="#6194cb" offset="0"/>
|
||||
<stop id="stop9770" stop-color="#729fcf" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<g id="g6707" transform="matrix(.022624 0 0 .020868 43.383 36.37)">
|
||||
<rect id="rect6709" opacity=".40206" height="478.36" width="1339.6" y="-150.7" x="-1559.3" fill="url(#linearGradient6715)"/>
|
||||
<path id="path6711" opacity=".40206" d="m-219.62-150.68v478.33c142.88 0.9 345.4-107.17 345.4-239.2 0-132.02-159.44-239.13-345.4-239.13z" fill="url(#radialGradient6717)"/>
|
||||
<path id="path6713" opacity=".40206" d="m-1559.3-150.68v478.33c-142.8 0.9-345.4-107.17-345.4-239.2 0-132.02 159.5-239.13 345.4-239.13z" fill="url(#radialGradient6719)"/>
|
||||
</g>
|
||||
<path id="path216" stroke-linejoin="round" d="m4.5218 38.687c0.0218 0.417 0.4599 0.833 0.8762 0.833h31.327c0.416 0 0.811-0.416 0.789-0.833l-0.936-27.226c-0.022-0.417-0.46-0.833-0.877-0.833h-13.27c-0.486 0-1.235-0.316-1.402-1.1066l-0.612-2.893c-0.155-0.7357-0.882-1.0379-1.298-1.0379h-14.779c-0.4162 0-0.8107 0.4163-0.7889 0.8326l0.9707 32.264z" stroke="url(#linearGradient3104)" stroke-linecap="round" fill="url(#radialGradient238)"/>
|
||||
<path id="path9788" opacity=".11364" stroke-linejoin="round" d="m5.2266 22.562h30.265" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9784" opacity=".11364" stroke-linejoin="round" d="m5.0422 18.562h30.447" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9778" opacity=".11364" stroke-linejoin="round" d="m4.9807 12.562h30.507" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9798" opacity=".11364" stroke-linejoin="round" d="m5.3862 32.562h30.109" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9800" opacity=".11364" stroke-linejoin="round" d="m5.5091 34.562h29.988" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9782" opacity=".11364" stroke-linejoin="round" d="m5.0422 16.562h30.447" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9780" opacity=".11364" stroke-linejoin="round" d="m5.0114 14.562h30.478" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9776" opacity=".11364" stroke-linejoin="round" d="m4.9221 10.562h15.281" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9774" opacity=".11364" stroke-linejoin="round" d="m4.8738 8.5625h14.783" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9794" opacity=".11364" stroke-linejoin="round" d="m5.3247 28.562h30.169" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9792" opacity=".11364" stroke-linejoin="round" d="m5.2881 26.562h30.205" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9790" opacity=".11364" stroke-linejoin="round" d="m5.2266 24.562h30.265" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9786" opacity=".11364" stroke-linejoin="round" d="m5.1959 20.562h30.296" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9796" opacity=".11364" stroke-linejoin="round" d="m5.3247 30.562h30.169" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9802" opacity=".11364" stroke-linejoin="round" d="m5.5091 36.562h29.988" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path219" opacity=".45143" d="m6.0683 38.864c0.0164 0.312-0.1809 0.52-0.4985 0.416-0.3177-0.104-0.5368-0.312-0.5531-0.624l-0.9477-32.065c-0.0164-0.3118 0.1651-0.5004 0.4774-0.5004l14.422-0.0477c0.313 0 0.932 0.3005 1.133 1.3222l0.574 2.8159c-0.427-0.4656-0.419-0.48-0.638-1.1571l-0.406-1.2592c-0.219-0.7276-0.698-0.8319-1.01-0.8319h-12.888c-0.3122 0-0.5095 0.2082-0.4931 0.5204l0.938 31.515-0.1096-0.104z" display="block" fill="url(#linearGradient491)"/>
|
||||
<g id="g220" fill-opacity=".75706" transform="matrix(1.0408 0 .054493 1.0408 -8.6702 2.6706)" fill="#fff">
|
||||
<path id="path221" fill-opacity=".50847" fill="#fff" d="m42.417 8.5152c0.005-0.0971-0.128-0.247-0.235-0.247l-13.031-0.0021s0.911 0.5879 2.201 0.5962l11.054 0.071c0.011-0.2117 0.003-0.256 0.011-0.4181z"/>
|
||||
</g>
|
||||
<path id="path233" stroke-linejoin="round" d="m39.784 39.511c1.143-0.044 1.963-1.097 2.047-2.321 0.791-11.549 1.659-21.232 1.659-21.232 0.072-0.248-0.168-0.495-0.48-0.495h-34.371c-0.0004 0-1.8507 21.867-1.8507 21.867-0.1145 0.982-0.466 1.804-1.5498 2.183l34.546-0.002z" display="block" stroke="#3465a4" fill="url(#linearGradient9772)"/>
|
||||
<path id="path304" opacity=".46591" d="m9.6202 16.464l32.791 0.065-1.574 20.002c-0.084 1.071-0.45 1.428-1.872 1.428-1.872 0-28.678-0.032-31.395-0.032 0.2335-0.321 0.3337-0.989 0.335-1.005l1.7152-20.458z" stroke="url(#linearGradient322)" stroke-linecap="round" stroke-width="1px" fill="none"/>
|
||||
<path id="path323" d="m9.6202 16.223l-1.1666 15.643s8.2964-4.148 18.666-4.148 15.555-11.495 15.555-11.495h-33.055z" fill-opacity=".089286" fill-rule="evenodd" fill="#fff"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient8"><stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop8" /><stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop9" /></linearGradient><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient8"
|
||||
id="linearGradient9"
|
||||
x1="32"
|
||||
y1="64"
|
||||
x2="32"
|
||||
y2="14.419661"
|
||||
gradientUnits="userSpaceOnUse" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
style="fill:#204a87;fill-opacity:1;stroke:#0c1522;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path4"
|
||||
d="M 29.921921,10.073012 26.993293,6.1977395 C 26.21651,5.1698698 25.163057,4.5924975 24.064598,4.5924975 H 5.0714589 c -1.1437425,0 -2.0708717,1.2268134 -2.0708717,2.740257 V 58.484215 c 0,0.504481 0.309043,0.913419 0.6902905,0.913419 H 60.294706 c 0.381247,0 0.690291,-0.408938 0.690291,-0.913419 V 12.813269 c 0,-1.513445 -0.927129,-2.740257 -2.070872,-2.740257 z" /><path
|
||||
style="fill:#204a87;fill-opacity:1;stroke:#3465a4;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path7"
|
||||
d="M 5.2089844,6.5917969 H 24.064453 c 0.375444,0 0.874561,0.2026195 1.333984,0.8105468 l 3.527344,4.6699223 h 29.84961 c 0.0082,0.01044 0.01784,0.02289 0.02734,0.03711 0.01056,0.0158 0.02193,0.03237 0.0332,0.05273 0.08049,0.145363 0.148438,0.361331 0.148438,0.650391 V 57.398437 H 5 V 7.3320312 C 5,7.0436394 5.0678061,6.828994 5.1484375,6.6835937 c 0.011294,-0.020366 0.022609,-0.038859 0.033203,-0.054687 0.00953,-0.014245 0.019073,-0.026632 0.027344,-0.037109 z" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;stroke:#0c1522;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path6"
|
||||
d="m 29.919347,14.419661 -2.927223,3.534545 C 26.215716,18.891703 25.16247,19.41831 24.064012,19.41831 H 3.0000008 l 0.015588,39.156085 c 2.171e-4,0.460126 0.3093777,0.833108 0.6906252,0.833108 h 56.603828 c 0.381248,0 0.690139,-0.372982 0.689957,-0.833108 L 60.983419,16.918986 C 60.982865,15.538609 60.055293,14.419661 58.91155,14.419661 H 29.919344 Z" /><path
|
||||
style="fill:url(#linearGradient9);fill-opacity:1;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path8"
|
||||
d="m 30.861328,16.419922 h 28.050781 c 0,0 0.07225,0.463543 0.07227,0.5 L 59,57.408203 H 5.015625 L 5,21.417969 h 19.064453 c 1.756119,0 3.349555,-0.836095 4.46875,-2.1875 z" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 4.9 KiB |
@@ -4,484 +4,81 @@
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg11300"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient3822">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3824" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3826" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5029"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient5027"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient3284">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3286" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3288" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3260">
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3262" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:0;"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3264" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3239">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3241" />
|
||||
<stop
|
||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3243" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11494">
|
||||
<stop
|
||||
id="stop11496"
|
||||
offset="0"
|
||||
style="stop-color:#ef2929;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11498"
|
||||
offset="1"
|
||||
style="stop-color:#ef2929;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11415">
|
||||
<stop
|
||||
id="stop11417"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#204a87;stop-opacity:0.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop11423" />
|
||||
<stop
|
||||
id="stop11419"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11399">
|
||||
<stop
|
||||
id="stop11401"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11403"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.28571,-0.285714)"
|
||||
y2="34.462429"
|
||||
x2="43.615788"
|
||||
y1="3.774456"
|
||||
x1="15.82836"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11425"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.57143,0)"
|
||||
y2="39.033859"
|
||||
x2="35.679932"
|
||||
y1="9.3458843"
|
||||
x1="9.6957054"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11427"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<linearGradient
|
||||
y2="33.462429"
|
||||
x2="26.758644"
|
||||
y1="19.774456"
|
||||
x1="13.267134"
|
||||
gradientTransform="translate(-60.85714,0.428571)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11439"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<radialGradient
|
||||
r="8.5"
|
||||
fy="39.142857"
|
||||
fx="12.071428"
|
||||
cy="39.142857"
|
||||
cx="12.071428"
|
||||
gradientTransform="matrix(1,0,0,0.487395,0,20.06483)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11441"
|
||||
xlink:href="#linearGradient11399" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="3.8335035"
|
||||
fy="15.048258"
|
||||
fx="27.577173"
|
||||
cy="15.048258"
|
||||
cx="27.577173"
|
||||
id="radialGradient11500"
|
||||
xlink:href="#linearGradient11494" />
|
||||
<radialGradient
|
||||
r="3.8335035"
|
||||
fy="16.049133"
|
||||
fx="27.577173"
|
||||
cy="16.049133"
|
||||
cx="27.577173"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11504"
|
||||
xlink:href="#linearGradient11494" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
id="radialGradient11514"
|
||||
xlink:href="#linearGradient11508" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="20.530962"
|
||||
fy="35.87817"
|
||||
fx="24.44569"
|
||||
cy="35.87817"
|
||||
cx="24.44569"
|
||||
id="radialGradient11526"
|
||||
xlink:href="#linearGradient11520" />
|
||||
<radialGradient
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11532"
|
||||
xlink:href="#linearGradient11508" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1350"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.44569"
|
||||
cy="35.87817"
|
||||
fx="24.44569"
|
||||
fy="35.87817"
|
||||
r="20.530962" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1352"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="16.049133"
|
||||
fx="27.577173"
|
||||
fy="16.049133"
|
||||
r="3.8335035" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1354"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="15.048258"
|
||||
fx="27.577173"
|
||||
fy="15.048258"
|
||||
r="3.8335035" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1356"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.049266,0,0,2.049266,-25.65002,-37.31089)"
|
||||
cx="24.44569"
|
||||
cy="35.87817"
|
||||
fx="24.44569"
|
||||
fy="35.87817"
|
||||
r="20.530962" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3239"
|
||||
id="linearGradient3249"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="15.663794"
|
||||
y1="5.1465507"
|
||||
x2="27.11207"
|
||||
y2="42.353451"
|
||||
gradientTransform="matrix(1.3975903,0,0,1.3975902,-1.8915666,-17.192769)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3266"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3813389,0,0,1.3813389,-1.8428134,-16.461473)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3270"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientTransform="matrix(-1.3813389,0,0,1.3813389,65.842795,-16.461473)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3278"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientTransform="matrix(1.3813389,0,0,-1.3813389,-1.8428134,48.504624)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3280"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.3813389,0,0,-1.3813389,65.842795,48.504624)"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient3284"
|
||||
id="radialGradient3290"
|
||||
cx="25.455845"
|
||||
cy="43.403805"
|
||||
fx="25.455845"
|
||||
fy="43.403805"
|
||||
r="20.682873"
|
||||
gradientTransform="matrix(1,0,0,0.205128,0,34.50046)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3822"
|
||||
id="linearGradient3828"
|
||||
x1="44"
|
||||
y1="41"
|
||||
x2="53"
|
||||
y2="56"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient3822-6-2"
|
||||
id="linearGradient3834-3-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="48"
|
||||
y1="54"
|
||||
x2="46"
|
||||
y2="42"
|
||||
gradientTransform="rotate(180,34.5,29.5)" />
|
||||
<linearGradient
|
||||
id="linearGradient3822-6-2">
|
||||
<stop
|
||||
x1="37"
|
||||
y1="62.628094"
|
||||
x2="37"
|
||||
y2="20"
|
||||
gradientTransform="matrix(-1.325,0,0,-1.3262548,81.025,83.06081)" /><linearGradient
|
||||
id="linearGradient3822-6-2"><stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3824-7-3" />
|
||||
<stop
|
||||
id="stop3824-7-3" /><stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3826-5-7" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(0,16)">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g5022"
|
||||
transform="matrix(0.03152036,0,0,0.03344397,60.035325,37.041739)">
|
||||
<rect
|
||||
y="-150.69685"
|
||||
x="-1559.2523"
|
||||
height="478.35718"
|
||||
width="1339.6335"
|
||||
id="rect4173"
|
||||
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
id="path5058"
|
||||
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
|
||||
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
|
||||
id="path5018" />
|
||||
</g>
|
||||
<rect
|
||||
style="color:#000000;fill:url(#linearGradient3249);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.99999975999999990;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect2354"
|
||||
width="58"
|
||||
height="57.999996"
|
||||
x="3"
|
||||
y="-12.999999"
|
||||
rx="2.5900114"
|
||||
ry="2.5900111" />
|
||||
<path
|
||||
xlink:href="#rect2354"
|
||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.07175946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3247"
|
||||
d="m 5.59375,-11.96875 c -0.8780988,0 -1.5625,0.684401 -1.5625,1.5625 l 0,52.8125 c 0,0.878099 0.6844012,1.5625 1.5625,1.5625 l 52.8125,0 c 0.878098,0 1.5625,-0.684402 1.5625,-1.5625 l 0,-52.8125 c 0,-0.878098 -0.684402,-1.5625 -1.5625,-1.5625 l -52.8125,0 z"
|
||||
transform="matrix(0.96536313,0,0,0.96536312,1.10838,0.55418996)" />
|
||||
<path
|
||||
id="stop3826-5-7" /></linearGradient></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
id="path3050-5-8"
|
||||
d="M 12,2 V 39 H 52 V 2 C 38.666667,2 25.333333,2 12,2 Z"
|
||||
style="fill:url(#linearGradient3834-3-0);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
|
||||
<path
|
||||
d="M 5.5,7.4642865 V 56.535713 h 53 V 7.4642865 c -17.666666,0 -35.333334,0 -53,0 z"
|
||||
style="fill:#729fcf;fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
id="path14"
|
||||
d="m 7.5,9.4648438 h 49 V 54.535156 h -49 z"
|
||||
style="fill:url(#linearGradient3834-3-0);fill-opacity:1;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="M 32,31.368447 9.6167373,52.533612"
|
||||
id="path16" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="M 32,31.368447 54.383263,52.533612"
|
||||
id="path17" /><path
|
||||
id="path3820-6-9"
|
||||
d="M 50,5 32,20 14,5 14.15625,37 H 50 Z"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
d="M 56.427207,11.001926 32.000581,31.368931 7.5739563,11.001926"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
id="path15"
|
||||
d="M 54.480126,15.155737 32.000581,33.899259 9.564511,15.191985"
|
||||
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -4,498 +4,81 @@
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg11300"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient3822">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3824" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3826" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5029"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient5027"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient3284">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3286" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3288" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3260">
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3262" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:0;"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3264" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3239">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3241" />
|
||||
<stop
|
||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3243" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11494">
|
||||
<stop
|
||||
id="stop11496"
|
||||
offset="0"
|
||||
style="stop-color:#ef2929;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11498"
|
||||
offset="1"
|
||||
style="stop-color:#ef2929;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11415">
|
||||
<stop
|
||||
id="stop11417"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#204a87;stop-opacity:0.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop11423" />
|
||||
<stop
|
||||
id="stop11419"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11399">
|
||||
<stop
|
||||
id="stop11401"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11403"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.28571,-0.285714)"
|
||||
y2="34.462429"
|
||||
x2="43.615788"
|
||||
y1="3.774456"
|
||||
x1="15.82836"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11425"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.57143,0)"
|
||||
y2="39.033859"
|
||||
x2="35.679932"
|
||||
y1="9.3458843"
|
||||
x1="9.6957054"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11427"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<linearGradient
|
||||
y2="33.462429"
|
||||
x2="26.758644"
|
||||
y1="19.774456"
|
||||
x1="13.267134"
|
||||
gradientTransform="translate(-60.85714,0.428571)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11439"
|
||||
xlink:href="#linearGradient11415" />
|
||||
<radialGradient
|
||||
r="8.5"
|
||||
fy="39.142857"
|
||||
fx="12.071428"
|
||||
cy="39.142857"
|
||||
cx="12.071428"
|
||||
gradientTransform="matrix(1,0,0,0.487395,0,20.06483)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11441"
|
||||
xlink:href="#linearGradient11399" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="3.8335035"
|
||||
fy="15.048258"
|
||||
fx="27.577173"
|
||||
cy="15.048258"
|
||||
cx="27.577173"
|
||||
id="radialGradient11500"
|
||||
xlink:href="#linearGradient11494" />
|
||||
<radialGradient
|
||||
r="3.8335035"
|
||||
fy="16.049133"
|
||||
fx="27.577173"
|
||||
cy="16.049133"
|
||||
cx="27.577173"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11504"
|
||||
xlink:href="#linearGradient11494" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
id="radialGradient11514"
|
||||
xlink:href="#linearGradient11508" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="20.530962"
|
||||
fy="35.87817"
|
||||
fx="24.44569"
|
||||
cy="35.87817"
|
||||
cx="24.44569"
|
||||
id="radialGradient11526"
|
||||
xlink:href="#linearGradient11520" />
|
||||
<radialGradient
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11532"
|
||||
xlink:href="#linearGradient11508" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1350"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.44569"
|
||||
cy="35.87817"
|
||||
fx="24.44569"
|
||||
fy="35.87817"
|
||||
r="20.530962" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1352"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="16.049133"
|
||||
fx="27.577173"
|
||||
fy="16.049133"
|
||||
r="3.8335035" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1354"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,0,0,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="15.048258"
|
||||
fx="27.577173"
|
||||
fy="15.048258"
|
||||
r="3.8335035" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1356"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.338462,0,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.049266,0,0,2.049266,-25.65002,-37.31089)"
|
||||
cx="24.44569"
|
||||
cy="35.87817"
|
||||
fx="24.44569"
|
||||
fy="35.87817"
|
||||
r="20.530962" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3239"
|
||||
id="linearGradient3249"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="15.663794"
|
||||
y1="5.1465507"
|
||||
x2="27.11207"
|
||||
y2="42.353451"
|
||||
gradientTransform="matrix(1.3975903,0,0,1.3975902,-1.8915666,-1.192769)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3266"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3813389,0,0,1.3813389,-1.8428134,-16.461473)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3270"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientTransform="matrix(-1.3813389,0,0,1.3813389,65.842795,-16.461473)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3278"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149"
|
||||
gradientTransform="matrix(1.3813389,0,0,-1.3813389,-1.8428134,48.504624)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3260"
|
||||
id="linearGradient3280"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.3813389,0,0,-1.3813389,65.842795,48.504624)"
|
||||
x1="12.363961"
|
||||
y1="11.394304"
|
||||
x2="18.22703"
|
||||
y2="17.58149" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient3284"
|
||||
id="radialGradient3290"
|
||||
cx="25.455845"
|
||||
cy="43.403805"
|
||||
fx="25.455845"
|
||||
fy="43.403805"
|
||||
r="20.682873"
|
||||
gradientTransform="matrix(1,0,0,0.205128,0,34.50046)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3822"
|
||||
id="linearGradient3828"
|
||||
x1="44"
|
||||
y1="41"
|
||||
x2="53"
|
||||
y2="56"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient11494"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient3822-6-2"
|
||||
id="linearGradient3834-3-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="48"
|
||||
y1="54"
|
||||
x2="25.519545"
|
||||
y2="28.740286"
|
||||
gradientTransform="rotate(180,34.5,37.5)" />
|
||||
<linearGradient
|
||||
id="linearGradient3822-6-2">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
x1="37"
|
||||
y1="62.628094"
|
||||
x2="37"
|
||||
y2="20"
|
||||
gradientTransform="matrix(-1.325,0,0,-1.3262548,81.025,83.06081)" /><linearGradient
|
||||
id="linearGradient3822-6-2"><stop
|
||||
style="stop-color:#fce94f;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3824-7-3" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
id="stop3824-7-3" /><stop
|
||||
style="stop-color:#c4a000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3826-5-7" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3774"
|
||||
id="linearGradient3780-9"
|
||||
x1="30"
|
||||
y1="-2"
|
||||
x2="26"
|
||||
y2="-26"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3774">
|
||||
<stop
|
||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3776" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3778" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g5022"
|
||||
transform="matrix(0.03152036,0,0,0.03344397,60.035325,53.041739)">
|
||||
<rect
|
||||
y="-150.69685"
|
||||
x="-1559.2523"
|
||||
height="478.35718"
|
||||
width="1339.6335"
|
||||
id="rect4173"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.402062;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none" />
|
||||
<path
|
||||
id="path5058"
|
||||
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.402062;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.402062;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none"
|
||||
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
|
||||
id="path5018" />
|
||||
</g>
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient3249);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
id="rect2354"
|
||||
width="58"
|
||||
height="57.999996"
|
||||
x="3"
|
||||
y="3.000001"
|
||||
rx="2.5900114"
|
||||
ry="2.5900111" />
|
||||
<path
|
||||
xlink:href="#rect2354"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
id="path3247"
|
||||
d="m 6.50838,5.0000002 c -0.8476842,0 -1.5083799,0.6606954 -1.5083799,1.5083798 V 57.49162 C 5.0000001,58.339304 5.6606958,59 6.50838,59 H 57.49162 C 58.339304,59 59,58.339303 59,57.49162 V 6.50838 C 59,5.6606966 58.339304,5.0000002 57.49162,5.0000002 Z" />
|
||||
<path
|
||||
id="path3050-5-8"
|
||||
d="M 12,18 V 55 H 52 V 18 c -13.333333,0 -26.666667,0 -40,0 z"
|
||||
style="fill:url(#linearGradient3834-3-0);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
|
||||
<path
|
||||
id="path3820-6-9"
|
||||
d="M 50,21 32,36 14,21 14.15625,53 H 50 Z"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</svg>
|
||||
id="stop3826-5-7" /></linearGradient></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
id="path3050-5-8"
|
||||
d="M 5.5,7.4642865 V 56.535713 h 53 V 7.4642865 c -17.666666,0 -35.333334,0 -53,0 z"
|
||||
style="fill:#fce94f;fill-opacity:1;stroke:#231f0b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
id="path14"
|
||||
d="m 7.5,9.4648438 h 49 V 54.535156 h -49 z"
|
||||
style="fill:url(#linearGradient3834-3-0);fill-opacity:1;stroke:#fce94f;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="M 32,31.368447 9.6167373,52.533612"
|
||||
id="path16" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="M 32,31.368447 54.383263,52.533612"
|
||||
id="path17" /><path
|
||||
id="path3820-6-9"
|
||||
d="M 56.427207,11.001926 32.000581,31.368931 7.5739563,11.001926"
|
||||
style="fill:none;stroke:#fce94f;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /><path
|
||||
id="path15"
|
||||
d="M 54.480126,15.155737 32.000581,33.899259 9.564511,15.191985"
|
||||
style="fill:none;stroke:#c4a000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 17 KiB |
@@ -36,39 +36,6 @@
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2690">
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2692" />
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2694" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2682">
|
||||
<stop
|
||||
style="stop-color:#3977c3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2684" />
|
||||
<stop
|
||||
style="stop-color:#89aedc;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2686" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2402">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2404" />
|
||||
<stop
|
||||
style="stop-color:#528ac5;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2406" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2380">
|
||||
<stop
|
||||
@@ -80,130 +47,6 @@
|
||||
offset="1"
|
||||
id="stop2384" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2871">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2873" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2875" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2847">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2831">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833" />
|
||||
<stop
|
||||
id="stop2855"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2797">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2799" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2801" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2831"
|
||||
id="linearGradient1486"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2847"
|
||||
id="linearGradient1488"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1491"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1493"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient1501"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3063"
|
||||
id="linearGradient2386"
|
||||
x1="42.703487"
|
||||
y1="20.547306"
|
||||
x2="26.605606"
|
||||
y2="33.634254"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2402"
|
||||
id="linearGradient2408"
|
||||
x1="18.935766"
|
||||
y1="23.667896"
|
||||
x2="53.588623"
|
||||
y2="26.649363"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2682"
|
||||
id="linearGradient2688"
|
||||
x1="36.713837"
|
||||
y1="31.455952"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,-0.33380651,-16.948724)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2690"
|
||||
id="linearGradient2696"
|
||||
x1="32.647972"
|
||||
y1="30.748846"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,-0.33380651,-16.948724)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2380"
|
||||
id="linearGradient3034"
|
||||
@@ -212,131 +55,6 @@
|
||||
y1="20.134634"
|
||||
x2="23.705669"
|
||||
y2="34.083359" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient3036"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2402"
|
||||
id="linearGradient3038"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="18.935766"
|
||||
y1="23.667896"
|
||||
x2="53.588623"
|
||||
y2="26.649363" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient3040"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2831-7"
|
||||
id="linearGradient1486-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.30396568,-17.325948)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
id="linearGradient2831-7">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833-4" />
|
||||
<stop
|
||||
id="stop2855-0"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2847-8"
|
||||
id="linearGradient1488-4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.7954,45.353844)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
id="linearGradient2847-8">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849-8" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2380-5"
|
||||
id="linearGradient2386-4"
|
||||
x1="62.513836"
|
||||
y1="36.061237"
|
||||
x2="15.984863"
|
||||
y2="20.60858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient2380-5">
|
||||
<stop
|
||||
style="stop-color:#b9cfe7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2382-5" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2384-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2380-5"
|
||||
id="linearGradient3034-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="62.513836"
|
||||
y1="36.061237"
|
||||
x2="15.984863"
|
||||
y2="20.60858" />
|
||||
<linearGradient
|
||||
id="linearGradient3895">
|
||||
<stop
|
||||
style="stop-color:#b9cfe7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3897" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2797-1"
|
||||
id="linearGradient3861-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
id="linearGradient2797-1">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2799-5" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2801-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3063"
|
||||
id="linearGradient3858"
|
||||
@@ -345,50 +63,6 @@
|
||||
y1="20.547306"
|
||||
x2="26.605606"
|
||||
y2="33.634254" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2831-2"
|
||||
id="linearGradient1486-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
id="linearGradient2831-2">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833-3" />
|
||||
<stop
|
||||
id="stop2855-1"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient2847-82"
|
||||
id="linearGradient1488-8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
id="linearGradient2847-82">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849-7" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851-7" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient3063-2"
|
||||
id="linearGradient3858-1"
|
||||
@@ -427,14 +101,6 @@
|
||||
offset="1"
|
||||
id="stop2384-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient951"
|
||||
id="linearGradient953"
|
||||
x1="25.582823"
|
||||
y1="38.607929"
|
||||
x2="22.003767"
|
||||
y2="11.384317"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient951"
|
||||
id="linearGradient2999"
|
||||
@@ -508,10 +174,6 @@
|
||||
transform="matrix(0.76079494,0,0,0.76079494,16.86351,-3.1260111)">
|
||||
<g
|
||||
id="g3863">
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient1486);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1488);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 H 7.986588 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
|
||||
id="path2865" />
|
||||
<g
|
||||
id="g1878"
|
||||
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
|
||||
@@ -519,7 +181,7 @@
|
||||
<path
|
||||
id="path1880"
|
||||
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:1.9334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#0c1522;stroke-width:1.9334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:none;stroke:#729fcf;stroke-width:0.732809;stroke-opacity:1"
|
||||
@@ -534,10 +196,6 @@
|
||||
<g
|
||||
id="g3863-0"
|
||||
transform="rotate(180,32.993294,14.5)">
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient1486-5);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1488-8);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 H 7.986588 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
|
||||
id="path2865-3" />
|
||||
<g
|
||||
id="g1878-6"
|
||||
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
|
||||
@@ -545,7 +203,7 @@
|
||||
<path
|
||||
id="path1880-2"
|
||||
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:1.9334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#0c1522;stroke-width:1.9334;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:none;stroke:#729fcf;stroke-width:0.732809;stroke-opacity:1"
|
||||
|
||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 8.6 KiB |
@@ -1,230 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
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"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="edit-redo.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2240">
|
||||
<stop
|
||||
style="stop-color:#99b00b;stop-opacity:1;"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient4"><stop
|
||||
style="stop-color:#4e9a06;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2242" />
|
||||
<stop
|
||||
style="stop-color:#99b00b;stop-opacity:0;"
|
||||
id="stop4" /><stop
|
||||
style="stop-color:#8ae234;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2244" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2232">
|
||||
<stop
|
||||
style="stop-color:#788600;stop-opacity:1;"
|
||||
id="stop7" /></linearGradient><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2234" />
|
||||
<stop
|
||||
style="stop-color:#788600;stop-opacity:0;"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2236" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4991">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4993" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop4995" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8662">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8664" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient8668"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,-5.825329e-14,16.87306)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient2187"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2189"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2191"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2187"
|
||||
id="linearGradient1764"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.813471e-16,-1.171926,1.171926,1.813471e-16,1.782801,54.10111)"
|
||||
x1="17.060806"
|
||||
y1="11.39502"
|
||||
x2="12.624337"
|
||||
y2="12.583769" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4991"
|
||||
id="radialGradient4997"
|
||||
cx="16.563837"
|
||||
cy="11.132236"
|
||||
fx="16.563837"
|
||||
fy="11.132236"
|
||||
r="19.0625"
|
||||
gradientTransform="matrix(-1.290127e-2,1.685197,1.713082,1.311475e-2,-1.041499,-10.11571)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2232"
|
||||
id="linearGradient2238"
|
||||
x1="33"
|
||||
y1="35.75"
|
||||
x2="31.5"
|
||||
y2="42.5"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2240"
|
||||
id="linearGradient2246"
|
||||
x1="33"
|
||||
y1="35.75"
|
||||
x2="31.5"
|
||||
y2="42.5"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#788600"
|
||||
fill="#99b00b"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4"
|
||||
inkscape:cx="53.000477"
|
||||
inkscape:cy="33.008096"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="892"
|
||||
inkscape:window-height="831"
|
||||
inkscape:window-x="368"
|
||||
inkscape:window-y="57" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Edit Redo</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>edit</rdf:li>
|
||||
<rdf:li>redo</rdf:li>
|
||||
<rdf:li>again</rdf:li>
|
||||
<rdf:li>reapply</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(1.489736,0.000000,0.000000,-1.001252,-12.64716,75.31260)"
|
||||
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
|
||||
sodipodi:ry="8.3968935"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:cx="24.837126"
|
||||
id="path8660"
|
||||
style="opacity:0.14117647;color:#000000;fill:url(#radialGradient8668);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient2246);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient2238);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 38.37476,45.034369 C -1.6510486,46.355509 4.6747954,12.29355 25.49479,12.49765 L 25.49479,3.1222396 L 42.143271,17.708819 L 25.49479,33.006349 C 25.49479,33.006349 25.49479,23.337969 25.49479,23.337969 C 11.43168,22.751999 7.3172614,44.770549 38.37476,45.034369 z "
|
||||
id="path1432"
|
||||
sodipodi:nodetypes="ccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path2177"
|
||||
d="M 16.92492,39.315519 C 5.2018204,33.235892 8.7371274,13.087489 26.5085,13.549959 L 26.5085,5.4508678 C 26.5085,5.4508678 40.556238,17.714589 40.556238,17.714589 L 26.5085,30.658617 C 26.5085,30.658617 26.5085,22.380979 26.5085,22.380979 C 11.66865,22.032709 12.34859,35.138579 16.92492,39.315519 z "
|
||||
style="opacity:0.69886361;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1764);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
style="opacity:0.49431817;color:#000000;fill:url(#radialGradient4997);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 26.036989,4.5686095 L 36.723727,14.798241 C 29.786227,14.79824 32.036989,23.735424 25.911989,26.610424 L 25.974489,22.943609 C 10.786989,22.881109 11.661989,38.443609 22.724489,42.693609 C 3.6363414,37.811681 6.2869904,13.381109 25.911989,12.88111 L 26.036989,4.5686095 z "
|
||||
id="path4989"
|
||||
sodipodi:nodetypes="ccccccc" />
|
||||
</g>
|
||||
</svg>
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient4"
|
||||
id="linearGradient7"
|
||||
x1="10.802491"
|
||||
y1="49.560848"
|
||||
x2="44.045834"
|
||||
y2="16.298645"
|
||||
gradientUnits="userSpaceOnUse" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><g
|
||||
id="g3"><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:#8be236;fill-opacity:1;fill-rule:nonzero;stroke:#17230b;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
d="M 35.188946,2.999885 59.668998,24.363222 35.188946,46.769639 v -14.5239 L 32.594298,32.13747 C 17.80677,31.523733 7.7082907,42.867752 10.161957,55.053544 c 0.409194,2.032201 1.170168,4.02883 2.277583,5.946877 C 7.4484877,56.355657 4.9709797,50.858917 4.4415777,45.502099 3.0749939,31.674148 14.485393,17.102714 32.456904,17.278199 l 2.732042,0.02641 z"
|
||||
id="path1" /><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient7);fill-opacity:1;fill-rule:nonzero;stroke:#8ae234;stroke-width:1.47883;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
d="m 35.335937,10.65625 14.400391,12.574219 -14.400391,13.1875 V 27.615234 L 32,27.474609 C 21.515464,27.039216 13.798628,34.189897 13.613281,42.847656 13.066901,41.466422 12.735455,40.068714 12.599609,38.693359 11.681352,29.396575 19.370531,19.319731 31.824219,19.441406 l 3.511718,0.03516 z"
|
||||
id="path3"
|
||||
transform="matrix(1.3528102,0,0,1.3520431,-10.61372,-7.0084028)" /></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -1,229 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
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"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="edit-undo.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2326">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient4"><stop
|
||||
style="stop-color:#c4a000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2328" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
id="stop4" /><stop
|
||||
style="stop-color:#fce94f;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2330" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2316">
|
||||
<stop
|
||||
style="stop-color:#c4a000;stop-opacity:1;"
|
||||
id="stop7" /></linearGradient><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2318" />
|
||||
<stop
|
||||
style="stop-color:#c4a000;stop-opacity:0;"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2320" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2308">
|
||||
<stop
|
||||
style="stop-color:#edd400;stop-opacity:1;"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2310" />
|
||||
<stop
|
||||
style="stop-color:#edd400;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2312" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8662">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8664" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient8668"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,-6.227265e-14,16.87306)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient2187"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2189"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2191"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2187"
|
||||
id="linearGradient1764"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.813471e-16,-1.171926,-1.171926,1.813471e-16,46.17440,54.10111)"
|
||||
x1="17.060806"
|
||||
y1="11.39502"
|
||||
x2="12.624337"
|
||||
y2="12.583769" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2308"
|
||||
id="linearGradient2314"
|
||||
x1="26.5"
|
||||
y1="34.25"
|
||||
x2="26.25"
|
||||
y2="43.571831"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2316"
|
||||
id="linearGradient2322"
|
||||
x1="26.5"
|
||||
y1="34.25"
|
||||
x2="26.25"
|
||||
y2="43.571831"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2326"
|
||||
id="radialGradient2332"
|
||||
cx="15.09403"
|
||||
cy="13.282721"
|
||||
fx="15.09403"
|
||||
fy="13.282721"
|
||||
r="10.16466"
|
||||
gradientTransform="matrix(2.496031,-1.151905e-16,1.061756e-16,2.300689,-25.12402,-17.82636)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#c4a000"
|
||||
fill="#edd400"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="37.420325"
|
||||
inkscape:cy="-15.183692"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="891"
|
||||
inkscape:window-height="932"
|
||||
inkscape:window-x="294"
|
||||
inkscape:window-y="762" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Edit Undo</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>edit</rdf:li>
|
||||
<rdf:li>undo</rdf:li>
|
||||
<rdf:li>revert</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(-1.489736,0.000000,0.000000,-1.001252,60.60436,75.31260)"
|
||||
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
|
||||
sodipodi:ry="8.3968935"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:cx="24.837126"
|
||||
id="path8660"
|
||||
style="opacity:0.14117647;color:#000000;fill:url(#radialGradient8668);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient2314);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient2322);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 9.582441,45.034369 C 49.608249,46.355509 43.282405,12.29355 22.462411,12.49765 L 22.462411,3.1222396 L 5.8139298,17.708819 L 22.462411,33.006349 C 22.462411,33.006349 22.462411,23.337969 22.462411,23.337969 C 36.525521,22.751999 40.639939,44.770549 9.582441,45.034369 z "
|
||||
id="path1432"
|
||||
sodipodi:nodetypes="ccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path2177"
|
||||
d="M 31.032281,39.315519 C 42.75538,33.235892 39.220073,13.087489 21.448701,13.549959 L 21.448701,5.4508678 C 21.448701,5.4508678 7.4009628,17.714589 7.4009628,17.714589 L 21.448701,30.658617 C 21.448701,30.658617 21.448701,22.380979 21.448701,22.380979 C 36.288551,22.032709 35.608611,35.138579 31.032281,39.315519 z "
|
||||
style="opacity:0.69886361;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1764);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
style="opacity:0.51136364;color:#000000;fill:url(#radialGradient2332);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 6.6291261,17.682797 L 12.28598,23.074486 C 18.561553,22.897709 15.733126,16.710525 26.958446,13.616933 L 22.008699,12.998214 L 21.92031,4.3361562 L 6.6291261,17.682797 z "
|
||||
id="path2324"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
</g>
|
||||
</svg>
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient4"
|
||||
id="linearGradient7"
|
||||
x1="10.802491"
|
||||
y1="49.560848"
|
||||
x2="44.045834"
|
||||
y2="16.298645"
|
||||
gradientUnits="userSpaceOnUse" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><g
|
||||
id="g3"><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#221e0c;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
d="M 28.811054,2.9998852 4.331002,24.363222 28.811054,46.769639 v -14.5239 l 2.594648,-0.108269 c 14.787528,-0.613737 24.886008,10.730282 22.432341,22.916074 -0.409194,2.032201 -1.170168,4.02883 -2.277583,5.946877 4.991053,-4.644764 7.468561,-10.141504 7.997963,-15.498322 1.366583,-13.827951 -10.043816,-28.399385 -28.015327,-28.2239 l -2.732042,0.02641 z"
|
||||
id="path1" /><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient7);fill-rule:nonzero;stroke:#fce94f;stroke-width:1.47883;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
d="m 35.335937,10.65625 14.400391,12.574219 -14.400391,13.1875 V 27.615234 L 32,27.474609 C 21.515464,27.039216 13.798628,34.189897 13.613281,42.847656 13.066901,41.466422 12.735455,40.068714 12.599609,38.693359 11.681352,29.396575 19.370531,19.319731 31.824219,19.441406 l 3.511718,0.03516 z"
|
||||
id="path3"
|
||||
transform="matrix(-1.3528102,0,0,1.3520431,74.61372,-7.0084018)" /></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -1,67 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg97" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs3">
|
||||
<radialGradient id="radialGradient6719" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" r="117.14"/>
|
||||
<linearGradient id="linearGradient5060">
|
||||
<stop id="stop5062" offset="0"/>
|
||||
<stop id="stop5064" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient6717" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" r="117.14"/>
|
||||
<linearGradient id="linearGradient6715" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" y1="366.65" x1="302.86">
|
||||
<stop id="stop5050" stop-opacity="0" offset="0"/>
|
||||
<stop id="stop5056" offset=".5"/>
|
||||
<stop id="stop5052" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient238" gradientUnits="userSpaceOnUse" cy="37.518" cx="20.706" gradientTransform="matrix(1.055 -.027345 .17770 1.1909 -3.5722 -7.1253)" r="30.905">
|
||||
<stop id="stop1790" stop-color="#202020" offset="0"/>
|
||||
<stop id="stop1791" stop-color="#b9b9b9" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient491" y2="66.834" gradientUnits="userSpaceOnUse" x2="9.8981" gradientTransform="matrix(1.5168 0 0 .70898 -.87957 -1.3182)" y1="13.773" x1="6.2298">
|
||||
<stop id="stop3984" stop-color="#fff" stop-opacity=".87629" offset="0"/>
|
||||
<stop id="stop3985" stop-color="#fffffe" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient322" y2="46.689" gradientUnits="userSpaceOnUse" x2="12.854" gradientTransform="matrix(1.3175 0 0 .81626 -.87957 -1.3182)" y1="32.567" x1="13.036">
|
||||
<stop id="stop320" stop-color="#fff" offset="0"/>
|
||||
<stop id="stop321" stop-color="#fff" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3104" y2="6.1803" gradientUnits="userSpaceOnUse" x2="15.515" y1="31.368" x1="18.113">
|
||||
<stop id="stop3098" stop-color="#424242" offset="0"/>
|
||||
<stop id="stop3100" stop-color="#777" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient9772" y2="32.05" gradientUnits="userSpaceOnUse" x2="22.065" y1="36.988" x1="22.176">
|
||||
<stop id="stop9768" stop-color="#6194cb" offset="0"/>
|
||||
<stop id="stop9770" stop-color="#729fcf" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<g id="g6707" transform="matrix(.022624 0 0 .020868 43.383 36.37)">
|
||||
<rect id="rect6709" opacity=".40206" height="478.36" width="1339.6" y="-150.7" x="-1559.3" fill="url(#linearGradient6715)"/>
|
||||
<path id="path6711" opacity=".40206" d="m-219.62-150.68v478.33c142.88 0.9 345.4-107.17 345.4-239.2 0-132.02-159.44-239.13-345.4-239.13z" fill="url(#radialGradient6717)"/>
|
||||
<path id="path6713" opacity=".40206" d="m-1559.3-150.68v478.33c-142.8 0.9-345.4-107.17-345.4-239.2 0-132.02 159.5-239.13 345.4-239.13z" fill="url(#radialGradient6719)"/>
|
||||
</g>
|
||||
<path id="path216" stroke-linejoin="round" d="m4.5218 38.687c0.0218 0.417 0.4599 0.833 0.8762 0.833h31.327c0.416 0 0.811-0.416 0.789-0.833l-0.936-27.226c-0.022-0.417-0.46-0.833-0.877-0.833h-13.27c-0.486 0-1.235-0.316-1.402-1.1066l-0.612-2.893c-0.155-0.7357-0.882-1.0379-1.298-1.0379h-14.779c-0.4162 0-0.8107 0.4163-0.7889 0.8326l0.9707 32.264z" stroke="url(#linearGradient3104)" stroke-linecap="round" fill="url(#radialGradient238)"/>
|
||||
<path id="path9788" opacity=".11364" stroke-linejoin="round" d="m5.2266 22.562h30.265" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9784" opacity=".11364" stroke-linejoin="round" d="m5.0422 18.562h30.447" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9778" opacity=".11364" stroke-linejoin="round" d="m4.9807 12.562h30.507" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9798" opacity=".11364" stroke-linejoin="round" d="m5.3862 32.562h30.109" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9800" opacity=".11364" stroke-linejoin="round" d="m5.5091 34.562h29.988" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9782" opacity=".11364" stroke-linejoin="round" d="m5.0422 16.562h30.447" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9780" opacity=".11364" stroke-linejoin="round" d="m5.0114 14.562h30.478" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9776" opacity=".11364" stroke-linejoin="round" d="m4.9221 10.562h15.281" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9774" opacity=".11364" stroke-linejoin="round" d="m4.8738 8.5625h14.783" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9794" opacity=".11364" stroke-linejoin="round" d="m5.3247 28.562h30.169" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9792" opacity=".11364" stroke-linejoin="round" d="m5.2881 26.562h30.205" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9790" opacity=".11364" stroke-linejoin="round" d="m5.2266 24.562h30.265" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9786" opacity=".11364" stroke-linejoin="round" d="m5.1959 20.562h30.296" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9796" opacity=".11364" stroke-linejoin="round" d="m5.3247 30.562h30.169" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path9802" opacity=".11364" stroke-linejoin="round" d="m5.5091 36.562h29.988" stroke="#000" stroke-linecap="round" fill="#729fcf"/>
|
||||
<path id="path219" opacity=".45143" d="m6.0683 38.864c0.0164 0.312-0.1809 0.52-0.4985 0.416-0.3177-0.104-0.5368-0.312-0.5531-0.624l-0.9477-32.065c-0.0164-0.3118 0.1651-0.5004 0.4774-0.5004l14.422-0.0477c0.313 0 0.932 0.3005 1.133 1.3222l0.574 2.8159c-0.427-0.4656-0.419-0.48-0.638-1.1571l-0.406-1.2592c-0.219-0.7276-0.698-0.8319-1.01-0.8319h-12.888c-0.3122 0-0.5095 0.2082-0.4931 0.5204l0.938 31.515-0.1096-0.104z" display="block" fill="url(#linearGradient491)"/>
|
||||
<g id="g220" fill-opacity=".75706" transform="matrix(1.0408 0 .054493 1.0408 -8.6702 2.6706)" fill="#fff">
|
||||
<path id="path221" fill-opacity=".50847" fill="#fff" d="m42.417 8.5152c0.005-0.0971-0.128-0.247-0.235-0.247l-13.031-0.0021s0.911 0.5879 2.201 0.5962l11.054 0.071c0.011-0.2117 0.003-0.256 0.011-0.4181z"/>
|
||||
</g>
|
||||
<path id="path233" stroke-linejoin="round" d="m39.784 39.511c1.143-0.044 1.963-1.097 2.047-2.321 0.791-11.549 1.659-21.232 1.659-21.232 0.072-0.248-0.168-0.495-0.48-0.495h-34.371c-0.0004 0-1.8507 21.867-1.8507 21.867-0.1145 0.982-0.466 1.804-1.5498 2.183l34.546-0.002z" display="block" stroke="#3465a4" fill="url(#linearGradient9772)"/>
|
||||
<path id="path304" opacity=".46591" d="m9.6202 16.464l32.791 0.065-1.574 20.002c-0.084 1.071-0.45 1.428-1.872 1.428-1.872 0-28.678-0.032-31.395-0.032 0.2335-0.321 0.3337-0.989 0.335-1.005l1.7152-20.458z" stroke="url(#linearGradient322)" stroke-linecap="round" stroke-width="1px" fill="none"/>
|
||||
<path id="path323" d="m9.6202 16.223l-1.1666 15.643s8.2964-4.148 18.666-4.148 15.555-11.495 15.555-11.495h-33.055z" fill-opacity=".089286" fill-rule="evenodd" fill="#fff"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient8"><stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop8" /><stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop9" /></linearGradient><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient8"
|
||||
id="linearGradient9"
|
||||
x1="32"
|
||||
y1="64"
|
||||
x2="32"
|
||||
y2="14.419661"
|
||||
gradientUnits="userSpaceOnUse" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
style="fill:#204a87;fill-opacity:1;stroke:#0c1522;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path4"
|
||||
d="M 29.921921,10.073012 26.993293,6.1977395 C 26.21651,5.1698698 25.163057,4.5924975 24.064598,4.5924975 H 5.0714589 c -1.1437425,0 -2.0708717,1.2268134 -2.0708717,2.740257 V 58.484215 c 0,0.504481 0.309043,0.913419 0.6902905,0.913419 H 60.294706 c 0.381247,0 0.690291,-0.408938 0.690291,-0.913419 V 12.813269 c 0,-1.513445 -0.927129,-2.740257 -2.070872,-2.740257 z" /><path
|
||||
style="fill:#204a87;fill-opacity:1;stroke:#3465a4;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path7"
|
||||
d="M 5.2089844,6.5917969 H 24.064453 c 0.375444,0 0.874561,0.2026195 1.333984,0.8105468 l 3.527344,4.6699223 h 29.84961 c 0.0082,0.01044 0.01784,0.02289 0.02734,0.03711 0.01056,0.0158 0.02193,0.03237 0.0332,0.05273 0.08049,0.145363 0.148438,0.361331 0.148438,0.650391 V 57.398437 H 5 V 7.3320312 C 5,7.0436394 5.0678061,6.828994 5.1484375,6.6835937 c 0.011294,-0.020366 0.022609,-0.038859 0.033203,-0.054687 0.00953,-0.014245 0.019073,-0.026632 0.027344,-0.037109 z" /><path
|
||||
style="fill:#729fcf;fill-opacity:1;stroke:#0c1522;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path6"
|
||||
d="m 29.919347,14.419661 -2.927223,3.534545 C 26.215716,18.891703 25.16247,19.41831 24.064012,19.41831 H 3.0000008 l 0.015588,39.156085 c 2.171e-4,0.460126 0.3093777,0.833108 0.6906252,0.833108 h 56.603828 c 0.381248,0 0.690139,-0.372982 0.689957,-0.833108 L 60.983419,16.918986 C 60.982865,15.538609 60.055293,14.419661 58.91155,14.419661 H 29.919344 Z" /><path
|
||||
style="fill:url(#linearGradient9);fill-opacity:1;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="path8"
|
||||
d="m 30.861328,16.419922 h 28.050781 c 0,0 0.07225,0.463543 0.07227,0.5 L 59,57.408203 H 5.015625 L 5,21.417969 h 19.064453 c 1.756119,0 3.349555,-0.836095 4.46875,-2.1875 z" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 4.9 KiB |
@@ -173,7 +173,6 @@
|
||||
<file>Param_Text.svg</file>
|
||||
<file>Param_UInt.svg</file>
|
||||
<file>PolygonPick.svg</file>
|
||||
<file>Python.svg</file>
|
||||
<file>Std_CloseActiveWindow.svg</file>
|
||||
<file>Std_CloseAllWindows.svg</file>
|
||||
<file>Std_Export.svg</file>
|
||||
|
||||
@@ -2,658 +2,85 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="web-refresh.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient3063">
|
||||
<stop
|
||||
id="stop3065"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs2871"><linearGradient
|
||||
id="linearGradient5"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
style="stop-color:#729fcf;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop3067"
|
||||
id="stop19" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective58" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2690">
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:1;"
|
||||
id="stop20" /></linearGradient><linearGradient
|
||||
id="swatch18"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2692" />
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2694" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2682">
|
||||
<stop
|
||||
style="stop-color:#3977c3;stop-opacity:1;"
|
||||
id="stop18" /></linearGradient><linearGradient
|
||||
id="swatch15"><stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2684" />
|
||||
<stop
|
||||
style="stop-color:#89aedc;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2686" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2402">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
id="stop15" /></linearGradient><linearGradient
|
||||
id="linearGradient5-1"><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2404" />
|
||||
<stop
|
||||
style="stop-color:#528ac5;stop-opacity:1;"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2406" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2380">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
id="stop6" /></linearGradient><linearGradient
|
||||
id="linearGradient3836-9"><stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2382" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
id="stop3838-8" /><stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2384" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2871">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2873" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2875" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2847">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2831">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833" />
|
||||
<stop
|
||||
id="stop2855"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2797">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2799" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2801" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8662">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8664" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8666" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2831"
|
||||
id="linearGradient1486"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2847"
|
||||
id="linearGradient1488"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1491"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1493"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient1501"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient1503"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3063"
|
||||
id="linearGradient2386"
|
||||
x1="42.703487"
|
||||
y1="20.547306"
|
||||
x2="26.605606"
|
||||
y2="33.634254"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2402"
|
||||
id="linearGradient2408"
|
||||
x1="18.935766"
|
||||
y1="23.667896"
|
||||
x2="53.588623"
|
||||
y2="26.649363"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2682"
|
||||
id="linearGradient2688"
|
||||
x1="36.713837"
|
||||
y1="31.455952"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,-0.33380651,-16.948724)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2690"
|
||||
id="linearGradient2696"
|
||||
x1="32.647972"
|
||||
y1="30.748846"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,-0.33380651,-16.948724)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2380"
|
||||
id="linearGradient3034"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="41.791897"
|
||||
y1="20.134634"
|
||||
x2="23.705669"
|
||||
y2="34.083359" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient3036"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2402"
|
||||
id="linearGradient3038"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="18.935766"
|
||||
y1="23.667896"
|
||||
x2="53.588623"
|
||||
y2="26.649363" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient3040"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2831-7"
|
||||
id="linearGradient1486-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.30396568,-17.325948)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
id="linearGradient2831-7">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833-4" />
|
||||
<stop
|
||||
id="stop2855-0"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2847-8"
|
||||
id="linearGradient1488-4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.7954,45.353844)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2847-8">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849-8" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2380-5"
|
||||
id="linearGradient2386-4"
|
||||
x1="62.513836"
|
||||
y1="36.061237"
|
||||
x2="15.984863"
|
||||
y2="20.60858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient2380-5">
|
||||
<stop
|
||||
style="stop-color:#b9cfe7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2382-5" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2384-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2380-5"
|
||||
id="linearGradient3034-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="62.513836"
|
||||
y1="36.061237"
|
||||
x2="15.984863"
|
||||
y2="20.60858" />
|
||||
<linearGradient
|
||||
id="linearGradient3895">
|
||||
<stop
|
||||
style="stop-color:#b9cfe7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3897" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2797-1"
|
||||
id="linearGradient3861-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649177"
|
||||
y1="26.048164"
|
||||
x2="52.854095"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2797-1">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2799-5" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2801-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3063"
|
||||
id="linearGradient3858"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="42.703487"
|
||||
y1="20.547306"
|
||||
x2="26.605606"
|
||||
y2="33.634254" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2831-2"
|
||||
id="linearGradient1486-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.370336,0,0,1.3589114,0.02150968,-18.214919)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
id="linearGradient2831-2">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833-3" />
|
||||
<stop
|
||||
id="stop2855-1"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2847-82"
|
||||
id="linearGradient1488-8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.370336,0,0,-1.3589114,64.512944,44.464873)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2847-82">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849-7" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851-7" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3063-2"
|
||||
id="linearGradient3858-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="42.703487"
|
||||
y1="20.547306"
|
||||
x2="26.605606"
|
||||
y2="33.634254" />
|
||||
<linearGradient
|
||||
id="linearGradient3063-2">
|
||||
<stop
|
||||
id="stop3065-6"
|
||||
offset="0"
|
||||
style="stop-color:#729fcf;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop3067-0"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="stop3840-1" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient2380-9"
|
||||
id="linearGradient3034-4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="26.221533"
|
||||
y1="31.125586"
|
||||
x2="46.731483"
|
||||
y2="21.766298" />
|
||||
<linearGradient
|
||||
id="linearGradient2380-9">
|
||||
<stop
|
||||
y2="21.766298"
|
||||
gradientTransform="matrix(0.82942185,0.69481004,0.70076106,-0.82237821,-14.689134,46.171259)" /><linearGradient
|
||||
id="linearGradient2380-9"><stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2382-4" />
|
||||
<stop
|
||||
id="stop2382-4" /><stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2384-6" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#3465a4"
|
||||
fill="#729fcf"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.9999996"
|
||||
inkscape:cx="27.539797"
|
||||
inkscape:cy="30.325235"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
type="xygrid"
|
||||
id="grid3042" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:title></dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>reload</rdf:li>
|
||||
<rdf:li>refresh</rdf:li>
|
||||
<rdf:li>view</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,16)">
|
||||
<path
|
||||
transform="matrix(-2.0414388,0,0,-1.3606128,83.542608,85.352711)"
|
||||
d="m 40.481863,36.421127 c 0,4.637477 -7.004387,8.396894 -15.644737,8.396894 -8.64035,0 -15.6447375,-3.759417 -15.6447375,-8.396894 0,-4.637476 7.0043875,-8.396893 15.6447375,-8.396893 8.64035,0 15.644737,3.759417 15.644737,8.396893 z"
|
||||
sodipodi:ry="8.3968935"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:cx="24.837126"
|
||||
id="path8660"
|
||||
style="opacity:0.38333333;color:#000000;fill:url(#radialGradient1503);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<g
|
||||
id="g3863">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path2865"
|
||||
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 l -10.534458,0 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
|
||||
style="color:#000000;fill:url(#linearGradient1486);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1488);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
|
||||
<g
|
||||
style="fill:url(#linearGradient3858);fill-opacity:1;stroke:#204a87;stroke-width:0.73280919000000000;stroke-opacity:1"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
|
||||
id="g1878">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="color:#000000;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:1.93339872000000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
|
||||
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
|
||||
id="path1880"
|
||||
sodipodi:nodetypes="ccccccc" />
|
||||
</g>
|
||||
<g
|
||||
id="g2805"
|
||||
transform="matrix(-0.69686517,-0.58385766,-0.58876622,0.69105539,72.350404,1.0127423)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:0.73280919;stroke-opacity:1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path2807"
|
||||
d="M 52.368857,42.344789 C 57.336994,33.465615 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
|
||||
style="color:#000000;fill:none;stroke:#729fcf;stroke-width:2.20148993;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-1,0,0,-1,65.986588,29)"
|
||||
id="g3863-0">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path2865-3"
|
||||
d="m 27,-3.6915582 c 0,0 -12.247378,-0.8493196 -8.478954,13.4192502 l -10.534458,0 c 0,0 0.685168,-16.137073 19.013412,-13.4192502 z"
|
||||
style="color:#000000;fill:url(#linearGradient1486-5);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1488-8);stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
|
||||
<g
|
||||
style="fill:url(#linearGradient3858-1);fill-opacity:1;stroke:#204a87;stroke-width:0.73280919;stroke-opacity:1"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(-0.79349441,-0.66481753,-0.67040672,0.78687903,77.66003,0.94046451)"
|
||||
id="g1878-6">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="color:#000000;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:1.93339872000000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
|
||||
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.113843,3.1515478 7.6245439,20.496754 22.714328,33.219189 c 0,0 -0.251917,-9.88122 -0.251917,-9.88122 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
|
||||
id="path1880-2"
|
||||
sodipodi:nodetypes="ccccccc" />
|
||||
</g>
|
||||
<g
|
||||
id="g2805-4"
|
||||
transform="matrix(-0.69686517,-0.58385766,-0.58876622,0.69105539,72.350404,1.0127423)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:0.73280919;stroke-opacity:1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path2807-5"
|
||||
d="M 52.368857,42.344789 C 57.864671,33.591679 49.176003,12.601866 19.05552,12.672851 L 18.677956,5.6633463 7.4378077,19.282655 19.129354,29.167094 18.807724,20.554957 c 18.244937,0.381972 33.804002,9.457851 33.561133,21.789832 z"
|
||||
style="color:#000000;fill:none;stroke:#729fcf;stroke-width:2.20148993;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
id="stop2384-6" /></linearGradient><linearGradient
|
||||
xlink:href="#linearGradient2380-9"
|
||||
id="linearGradient3034"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="41.791897"
|
||||
y1="20.134634"
|
||||
x2="23.705669"
|
||||
y2="34.083359"
|
||||
gradientTransform="matrix(-0.82942185,-0.69481004,-0.70076106,0.82237821,78.689134,17.828742)" /></defs><metadata
|
||||
id="metadata2874"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:creator><cc:Agent><dc:title>[maxwxyz]</dc:title></cc:Agent></dc:creator><dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation><dc:publisher><cc:Agent><dc:title>FreeCAD</dc:title></cc:Agent></dc:publisher><dc:identifier>FreeCAD/src/</dc:identifier><dc:rights><cc:Agent><dc:title>FreeCAD LGPL2+</dc:title></cc:Agent></dc:rights><dc:date>2024</dc:date></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"
|
||||
style="display:inline"><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:nonzero;stroke:#0c1522;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 6.7411068,28.35175 C 1.4831503,3.6363838 28.09784,-5.6492191 51.300453,12.499428 L 58.138947,5.0555856 58.001843,29.387215 36.57066,29.365336 c 0,0 7.133319,-7.951066 7.133319,-7.951066 C 27.386121,9.1527 6.487378,10.070587 6.7411068,28.35175 Z"
|
||||
id="path1880" /><path
|
||||
id="path2807"
|
||||
d="M 8.9327084,16.531664 C 10.778287,7.0872986 29.562949,-3.0013417 51.45955,15.429377 l 4.588842,-4.832097 -0.19413,16.695009 -14.599448,0.0047 5.534397,-6.0237 C 33.264206,10.416141 16.345195,7.4769202 8.9327084,16.531664 Z"
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" /><path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3034-4);fill-opacity:1;fill-rule:nonzero;stroke:#0c1522;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 57.258893,35.64825 C 62.516849,60.363616 35.90216,69.649219 12.699547,51.500572 l -6.8384943,7.443843 0.1371039,-24.33163 21.4311834,0.02188 c 0,0 -7.13332,7.951066 -7.13332,7.951066 16.317859,12.26157 37.216602,11.343683 36.962873,-6.93748 z"
|
||||
id="path1880-2" /><path
|
||||
id="path2807-5"
|
||||
d="M 55.067292,47.468336 C 53.683665,57.143642 34.437051,67.001342 12.54045,48.570623 l -4.5888419,4.832097 0.19413,-16.695009 14.5994479,-0.0047 -5.534397,6.0237 c 13.525005,10.857147 30.444015,13.796366 37.856503,4.741623 z"
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:21;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 5.3 KiB |
@@ -2282,7 +2282,7 @@ QListView::item:selected:!active,
|
||||
QTableView::item:selected:!active,
|
||||
QColumnView::item:selected:!active {
|
||||
color: White;
|
||||
background-color: #353535;
|
||||
background-color: @ThemeAccentColor1;
|
||||
}
|
||||
|
||||
QTreeView::item:!selected:hover,
|
||||
|
||||
@@ -2269,7 +2269,7 @@ QListView::item:selected:!active,
|
||||
QTableView::item:selected:!active,
|
||||
QColumnView::item:selected:!active {
|
||||
color: White;
|
||||
background-color: #353535;
|
||||
background-color: @ThemeAccentColor1;
|
||||
}
|
||||
|
||||
QTreeView::item:!selected:hover,
|
||||
|
||||
@@ -2274,7 +2274,7 @@ QListView::item:selected:!active,
|
||||
QTableView::item:selected:!active,
|
||||
QColumnView::item:selected:!active {
|
||||
color: White;
|
||||
background-color: #353535;
|
||||
background-color: @ThemeAccentColor1;
|
||||
}
|
||||
|
||||
QTreeView::item:!selected:hover,
|
||||
|
||||
@@ -2290,7 +2290,7 @@ QListView::item:selected:!active,
|
||||
QTableView::item:selected:!active,
|
||||
QColumnView::item:selected:!active {
|
||||
color: black;
|
||||
background-color: #bfc1c0;
|
||||
background-color: @ThemeAccentColor1;
|
||||
}
|
||||
|
||||
QTreeView::item:!selected:hover,
|
||||
|
||||
@@ -2281,7 +2281,7 @@ QListView::item:selected:!active,
|
||||
QTableView::item:selected:!active,
|
||||
QColumnView::item:selected:!active {
|
||||
color: black;
|
||||
background-color: #BABABA;
|
||||
background-color: @ThemeAccentColor1;
|
||||
}
|
||||
|
||||
QTreeView::item:!selected:hover,
|
||||
|
||||
134
src/Mod/AddonManager/Resources/icons/CfdOF_workbench_icon.svg
Executable file → Normal file
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 2.2 KiB |
283
src/Mod/AddonManager/Resources/icons/Curves_workbench_icon.svg
Executable file → Normal file
@@ -1,270 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
version="1.1"
|
||||
id="svg2963"
|
||||
height="68.26667"
|
||||
width="68.26667">
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient29">
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop29" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop30" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient24">
|
||||
<stop
|
||||
id="stop23"
|
||||
offset="0"
|
||||
style="stop-color:#204a87;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop24"
|
||||
offset="1"
|
||||
style="stop-color:#729fcf;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient22">
|
||||
<stop
|
||||
id="stop21"
|
||||
offset="0"
|
||||
style="stop-color:#4e9a06;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop22"
|
||||
offset="1"
|
||||
style="stop-color:#8ae234;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient11"
|
||||
id="radialGradient13"
|
||||
cx="39.502319"
|
||||
cy="40.726604"
|
||||
fx="39.502319"
|
||||
fy="40.726604"
|
||||
r="22.062311"
|
||||
gradientTransform="matrix(1.7937293,1.017333,-1.0383284,1.824402,12.77456,-63.360877)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient11">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop13" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop11" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3377-3">
|
||||
<stop
|
||||
id="stop3379-8"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381-3"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4387">
|
||||
<stop
|
||||
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4389" />
|
||||
<stop
|
||||
style="stop-color:#002795;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4391" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-0-6-92-4-0">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-2-7-06-8-6" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-5-5-8-7-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient22"
|
||||
id="linearGradient4516"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="14.577716"
|
||||
y1="27.643585"
|
||||
x2="50.611004"
|
||||
y2="42.347919"
|
||||
gradientTransform="matrix(0.91764667,0,0,0.91543299,7.4569649,-10.851524)" />
|
||||
id="defs2965">
|
||||
<linearGradient
|
||||
id="linearGradient3354">
|
||||
<stop
|
||||
id="stop3356"
|
||||
offset="0"
|
||||
style="stop-color:#729fcf;stop-opacity:1" />
|
||||
style="stop-color:#2157c7;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3358"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:1" />
|
||||
style="stop-color:#6daaff;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="31.92013"
|
||||
x2="53.693264"
|
||||
y1="45.023232"
|
||||
x1="28.158932"
|
||||
gradientTransform="matrix(0.91764667,0,0,0.91543299,5.5967063,-9.6079085)"
|
||||
xlink:href="#linearGradient3354"
|
||||
id="linearGradient4516"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient18"
|
||||
xlink:href="#linearGradient24" />
|
||||
x1="14.577716"
|
||||
y1="27.643585"
|
||||
x2="50.611004"
|
||||
y2="42.347919" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.91764667,0,0,0.91543299,-34.434605,-11.375877)"
|
||||
y2="34.816742"
|
||||
x2="41.556858"
|
||||
y1="47.53363"
|
||||
x1="65.435036"
|
||||
gradientTransform="translate(-39.003978,-11.048337)"
|
||||
y2="42.347919"
|
||||
x2="50.611004"
|
||||
y1="27.643585"
|
||||
x1="14.577716"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient14"
|
||||
xlink:href="#linearGradient3354" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient29"
|
||||
id="linearGradient30"
|
||||
x1="29.777794"
|
||||
y1="35.716694"
|
||||
x2="55.384754"
|
||||
y2="14.091692"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
y2="42.347919"
|
||||
x2="50.611004"
|
||||
y1="27.643585"
|
||||
x1="14.577716"
|
||||
gradientTransform="translate(6.412284,2.3813801)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient18"
|
||||
xlink:href="#linearGradient3354" />
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
id="metadata2968">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<path
|
||||
d="M 18.260795,61.000176 C 1.7864687,47.327689 1.5712439,37.276581 7.4738156,17.881577 10.514149,14.174495 15.337186,5.0777001 30.812411,3.2439598 11.081982,19.578959 16.471245,36.612767 22.896918,45.84763 c -4.058659,4.167818 -6.324466,8.717398 -4.636123,15.152546 z"
|
||||
style="opacity:1;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#0c1522;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path12" />
|
||||
<path
|
||||
id="path16"
|
||||
style="display:inline;opacity:1;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#0c1522;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 39.80712,40.886165 C 39.347502,18.750404 43.027643,14.637758 50.918334,7.7286519 54.736143,9.018553 59.074083,12.861105 60.054063,15.930397 53.803846,23.917301 52.515998,35.730898 57.174803,58.979264 54.485196,50.098341 51.074626,40.861606 39.80712,40.886165 Z" />
|
||||
<path
|
||||
id="path28"
|
||||
style="display:inline;opacity:1;fill:url(#linearGradient30);fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 51.318359,10.046875 c 2.664611,1.226923 5.342254,3.630329 6.441407,5.619141 -4.704254,6.607763 -6.335888,15.411672 -4.847657,29.220703 -2.549632,-3.157876 -6.050466,-5.445581 -11.125,-5.908203 -0.197725,-18.706008 2.787826,-22.928537 9.53125,-28.931641 z" />
|
||||
<path
|
||||
id="path24"
|
||||
style="display:inline;opacity:1;fill:#8ae234;fill-opacity:1;fill-rule:evenodd;stroke:#17230b;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 22.896918,45.84763 C 10.507844,27.298201 19.418369,12.723127 30.812411,3.2439598 38.009021,2.2698045 45.343419,4.3228707 50.918334,7.7286519 40.938023,15.97348 39.70122,22.647624 39.80712,40.886165 34.254637,41.133337 27.673519,41.988373 22.896918,45.84763 Z" />
|
||||
<path
|
||||
id="path21"
|
||||
style="opacity:1;fill:url(#linearGradient4516);fill-opacity:1;fill-rule:evenodd;stroke:#8ae234;stroke-width:1.93455;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 34.685547,5.0859375 c 4.3141,0.061386 8.542613,1.2198975 12.195312,3.0117188 C 38.840841,15.580985 37.559778,22.755428 37.558594,37.972656 33.070552,38.2911 27.950191,39.15602 23.683594,41.839844 14.12913,25.966693 21.656459,13.68295 31.611328,5.2363281 32.632653,5.1230644 33.659554,5.0713386 34.685547,5.0859375 Z"
|
||||
transform="matrix(1.0338547,0,0,1.0338147,-1.0247137,-0.25384716)" />
|
||||
<path
|
||||
d="M 24.462891,6.7109375 C 11.291828,21.044915 15.087935,35.534635 20.701172,44.390625 18.167597,47.28992 16.422634,50.565513 16.210937,54.5 4.8313443,43.641922 4.991564,34.921511 9.9746094,18.4375 12.780553,14.921062 16.016896,9.4755874 24.462891,6.7109375 Z"
|
||||
style="opacity:1;fill:url(#linearGradient14);fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:1.93455;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path26"
|
||||
transform="matrix(1.0338547,0,0,1.0338147,-1.0247137,-0.25384716)" />
|
||||
<path
|
||||
style="fill:none;stroke:#0c1522;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 8.4851839,51.269783 C 11.811877,31.098625 44.97231,22.579841 54.52943,40.463301"
|
||||
id="path839" />
|
||||
<path
|
||||
style="fill:none;stroke:#0c1522;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 4.0012601,37.976551 C 14.369364,18.537691 43.536681,16.009382 54.707116,29.842375"
|
||||
id="path841" />
|
||||
<path
|
||||
style="fill:none;stroke:#0c1522;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 5.5280638,24.90186 C 20.261449,10.062113 39.319651,5.3312343 56.764105,21.582244"
|
||||
id="path843" />
|
||||
</g>
|
||||
<path
|
||||
d="M 0,45.166348 C 0,9.3101224 12.722328,19.50581 12.722328,3.3479809 18.762656,4.9062428 31.195442,4.155445 40.971688,5.3464369 34.515753,14.572984 26.922167,16.224589 20.790937,27.692639 17.368571,34.093945 16.934693,49.245484 17.088633,60.56706 9.541714,58.375045 6.542525,47.956465 0,45.166348 Z"
|
||||
style="opacity:0.5;fill:url(#linearGradient14);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path12" />
|
||||
<path
|
||||
id="path16"
|
||||
style="opacity:0.5;fill:url(#linearGradient18);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 39.227193,63.245445 c 0,-28.490667 13.169517,-19.644505 19.865479,-50.031253 3.340856,3.885475 3.080531,7.216754 9.173998,6.901154 C 67.754828,37.553062 62.114048,47.747978 62.337496,68.26667 54.790577,66.074655 50.959088,61.515788 39.227193,63.245445 Z" />
|
||||
<path
|
||||
id="path21"
|
||||
style="opacity:1;fill:url(#linearGradient4516);fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 17.088633,60.56706 C 16.484207,11.48631 29.101921,22.676059 40.971688,5.3464369 c 6.040328,1.5582619 12.080656,2.8516219 18.120984,7.8677551 -2.703442,10.674542 -5.56786,17.37902 -13.359277,27.368174 -4.464312,5.723567 -6.660142,11.341503 -6.506202,22.663079 -7.546919,1.155966 -15.596035,0.111732 -22.13856,-2.678385 z" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 3.3 KiB |
537
src/Mod/AddonManager/Resources/icons/FCGear_workbench_icon.svg
Executable file → Normal file
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 145 KiB |
228
src/Mod/AddonManager/Resources/icons/compact_view.svg
Executable file → Normal file
@@ -1,215 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g6">
|
||||
<rect
|
||||
x="5"
|
||||
y="8.6585369"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect4"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="5"
|
||||
y="8.6585369"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect1"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g5">
|
||||
<rect
|
||||
x="5"
|
||||
y="26.61351"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect5"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="5"
|
||||
y="26.61351"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect2"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g4">
|
||||
<rect
|
||||
x="5"
|
||||
y="44.568478"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect6"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="5"
|
||||
y="44.568478"
|
||||
class="st0"
|
||||
width="10.451612"
|
||||
height="10.772984"
|
||||
id="rect3"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g1"
|
||||
transform="translate(0,-1.7954979)">
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="15.840527"
|
||||
x2="59"
|
||||
y2="15.840527"
|
||||
id="line6"
|
||||
style="fill:#eeeeec;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="15.840527"
|
||||
x2="59"
|
||||
y2="15.840527"
|
||||
id="line3"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g2"
|
||||
transform="translate(0,-1.795496)">
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="33.795498"
|
||||
x2="59"
|
||||
y2="33.795498"
|
||||
id="line7"
|
||||
style="fill:#eeeeec;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="33.795498"
|
||||
x2="59"
|
||||
y2="33.795498"
|
||||
id="line4"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g3"
|
||||
transform="translate(0,-1.7954998)">
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="51.750469"
|
||||
x2="59"
|
||||
y2="51.750469"
|
||||
id="line8"
|
||||
style="fill:#eeeeec;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="24.161291"
|
||||
y1="51.750469"
|
||||
x2="59"
|
||||
y2="51.750469"
|
||||
id="line5"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
|
||||
.st1{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect x="0.5" y="1.5" class="st0" width="3" height="3"/>
|
||||
<rect x="0.5" y="6.5" class="st0" width="3" height="3"/>
|
||||
<rect x="0.5" y="11.5" class="st0" width="3" height="3"/>
|
||||
<line class="st1" x1="6" y1="3.5" x2="16" y2="3.5"/>
|
||||
<line class="st1" x1="6" y1="8.5" x2="16" y2="8.5"/>
|
||||
<line class="st1" x1="6" y1="13.5" x2="16" y2="13.5"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 829 B |
230
src/Mod/AddonManager/Resources/icons/composite_view.svg
Executable file → Normal file
@@ -1,217 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g18"
|
||||
transform="translate(0,4)">
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="5"
|
||||
x2="29.338028"
|
||||
y2="5"
|
||||
id="line8"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="5"
|
||||
x2="29.338028"
|
||||
y2="5"
|
||||
id="line1"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g23"
|
||||
transform="translate(0,-4)">
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="59"
|
||||
x2="29.338028"
|
||||
y2="59"
|
||||
id="line12"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="59"
|
||||
x2="29.338028"
|
||||
y2="59"
|
||||
id="line5"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g19">
|
||||
<rect
|
||||
x="37.938789"
|
||||
y="5"
|
||||
class="st1"
|
||||
width="21.061209"
|
||||
height="54"
|
||||
id="rect12"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="37.938789"
|
||||
y="5"
|
||||
class="st1"
|
||||
width="21.061209"
|
||||
height="54"
|
||||
id="rect5"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g22"
|
||||
transform="translate(0,-5.5)">
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="49"
|
||||
x2="29.338028"
|
||||
y2="49"
|
||||
id="line13"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="49"
|
||||
x2="29.338028"
|
||||
y2="49"
|
||||
id="line14"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g21"
|
||||
transform="translate(0,-5)">
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="37"
|
||||
x2="29.338028"
|
||||
y2="37"
|
||||
id="line15"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="37"
|
||||
x2="29.338028"
|
||||
y2="37"
|
||||
id="line16"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g20"
|
||||
transform="translate(0,-4.5)">
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="25"
|
||||
x2="29.338028"
|
||||
y2="25"
|
||||
id="line17"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st0"
|
||||
x1="5"
|
||||
y1="25"
|
||||
x2="29.338028"
|
||||
y2="25"
|
||||
id="line18"
|
||||
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
||||
.st1{fill:none;stroke:#000000;stroke-width:0.9259;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<line class="st0" x1="0.3" y1="1.5" x2="6.7" y2="1.5"/>
|
||||
<line class="st0" x1="0.3" y1="4.5" x2="6.7" y2="4.5"/>
|
||||
<line class="st0" x1="0.3" y1="7.5" x2="6.7" y2="7.5"/>
|
||||
<line class="st0" x1="0.3" y1="10.5" x2="6.7" y2="10.5"/>
|
||||
<line class="st0" x1="0.3" y1="13.5" x2="6.7" y2="13.5"/>
|
||||
<rect x="9.5" y="1.5" class="st1" width="5" height="13"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 855 B |
237
src/Mod/AddonManager/Resources/icons/expanded_view.svg
Executable file → Normal file
@@ -1,224 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g31"
|
||||
transform="matrix(2.2676716,0,0,2.2902699,-32.430797,-17.331585)"
|
||||
style="stroke-width:0.4388">
|
||||
<rect
|
||||
x="16.5"
|
||||
y="10.217391"
|
||||
class="st0"
|
||||
width="7.6086955"
|
||||
height="7.6086955"
|
||||
id="rect23"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:2.6328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="16.5"
|
||||
y="10.217391"
|
||||
class="st0"
|
||||
width="7.6086955"
|
||||
height="7.6086955"
|
||||
id="rect1"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.877603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g26"
|
||||
transform="matrix(1.8942363,0,0,1.9131132,-28.285362,-8.7368346)"
|
||||
style="stroke-width:0.525306">
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="9.73913"
|
||||
x2="46.086956"
|
||||
y2="9.73913"
|
||||
id="line23"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:3.15183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="9.73913"
|
||||
x2="46.086956"
|
||||
y2="9.73913"
|
||||
id="line1"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.05062;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g27"
|
||||
transform="matrix(1.8942363,0,0,1.9131132,-28.285362,-11.523328)"
|
||||
style="stroke-width:0.525306">
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="16.304348"
|
||||
x2="46.086956"
|
||||
y2="16.304348"
|
||||
id="line26"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:3.15183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="16.304348"
|
||||
x2="46.086956"
|
||||
y2="16.304348"
|
||||
id="line4"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.05062;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g32"
|
||||
transform="matrix(2.2676716,0,0,2.2902699,-32.430797,17.104453)"
|
||||
style="stroke-width:0.4388">
|
||||
<rect
|
||||
x="16.5"
|
||||
y="10.217391"
|
||||
class="st0"
|
||||
width="7.6086955"
|
||||
height="7.6086955"
|
||||
id="rect31"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:2.6328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<rect
|
||||
x="16.5"
|
||||
y="10.217391"
|
||||
class="st0"
|
||||
width="7.6086955"
|
||||
height="7.6086955"
|
||||
id="rect32"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.877603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g33"
|
||||
transform="matrix(1.8942363,0,0,1.9131132,-28.285362,25.699204)"
|
||||
style="stroke-width:0.525306">
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="9.73913"
|
||||
x2="46.086956"
|
||||
y2="9.73913"
|
||||
id="line32"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:3.15183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="9.73913"
|
||||
x2="46.086956"
|
||||
y2="9.73913"
|
||||
id="line33"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.05062;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g35"
|
||||
transform="matrix(1.8942363,0,0,1.9131132,-28.285362,22.91271)"
|
||||
style="stroke-width:0.525306">
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="16.304348"
|
||||
x2="46.086956"
|
||||
y2="16.304348"
|
||||
id="line34"
|
||||
style="fill:none;stroke:#eeeeec;stroke-width:3.15183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
<line
|
||||
class="st1"
|
||||
x1="32.391304"
|
||||
y1="16.304348"
|
||||
x2="46.086956"
|
||||
y2="16.304348"
|
||||
id="line35"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.05062;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
|
||||
.st1{fill:none;stroke:#000000;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect x="0.5" y="1.5" class="st0" width="5" height="5"/>
|
||||
<line class="st1" x1="7" y1="2.5" x2="16" y2="2.5"/>
|
||||
<line class="st1" x1="7" y1="10.5" x2="16" y2="10.5"/>
|
||||
<line class="st1" x1="7" y1="13.5" x2="16" y2="13.5"/>
|
||||
<rect x="0.5" y="9.5" class="st0" width="5" height="5"/>
|
||||
<line class="st1" x1="7" y1="5.5" x2="16" y2="5.5"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 826 B |
1270
src/Mod/AddonManager/Resources/icons/fasteners_workbench_icon.svg
Executable file → Normal file
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 71 KiB |
437
src/Mod/AddonManager/Resources/icons/lattice2_workbench_icon.svg
Executable file → Normal file
@@ -2,263 +2,272 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg2568"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Part_Compound_DeepSOIC.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1"
|
||||
inkscape:export-filename="/home/user/Downloads/cad/mystuff/icons/Part/mystuff/Part_Compound_5_32px.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs2871">
|
||||
id="defs2570">
|
||||
<linearGradient
|
||||
id="linearGradient263">
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#f57900;stop-opacity:1"
|
||||
id="stop3866"
|
||||
offset="0"
|
||||
id="stop262" />
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#fcaf3e;stop-opacity:1"
|
||||
id="stop3868"
|
||||
offset="1"
|
||||
id="stop263" />
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2576" />
|
||||
<linearGradient
|
||||
id="linearGradient261">
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
style="stop-color:#fcaf3e;stop-opacity:1"
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
id="stop261" />
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#f57900;stop-opacity:1"
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
id="stop260" />
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient223">
|
||||
id="linearGradient3023">
|
||||
<stop
|
||||
style="stop-color:#f57900;stop-opacity:1"
|
||||
id="stop3025"
|
||||
offset="0"
|
||||
id="stop223" />
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#fcaf3e;stop-opacity:1"
|
||||
id="stop3027"
|
||||
offset="1"
|
||||
id="stop224" />
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3692"
|
||||
cx="45.883327"
|
||||
cy="28.869568"
|
||||
fx="45.883327"
|
||||
fy="28.869568"
|
||||
r="19.467436"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
id="linearGradient3030">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
id="stop3032"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
id="stop3034"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
style="stop-color:#002795;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9-3">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8-5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2">
|
||||
<stop
|
||||
style="stop-color:#73d216;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop1" />
|
||||
<stop
|
||||
style="stop-color:#8ae234;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient261"
|
||||
id="linearGradient251"
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3837"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-129.76006"
|
||||
y1="90.000977"
|
||||
x2="-130.90988"
|
||||
y2="78.959839" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient263"
|
||||
id="linearGradient252"
|
||||
gradientTransform="matrix(0.98773287,-0.06324662,0.02642229,1.230404,-216.68819,-80.013158)"
|
||||
cx="148.88333"
|
||||
cy="81.869568"
|
||||
fx="148.88333"
|
||||
fy="81.869568"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3839"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-146.05777"
|
||||
y1="77.267624"
|
||||
x2="-131.3138"
|
||||
y2="77.218475" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient223"
|
||||
id="linearGradient259"
|
||||
gradientTransform="matrix(0.69474204,0.27707782,-0.32964185,2.4645588,-139.05338,-247.09727)"
|
||||
cx="135.38333"
|
||||
cy="97.369568"
|
||||
fx="135.38333"
|
||||
fy="97.369568"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3841"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-129.76006"
|
||||
y1="90.000977"
|
||||
x2="-128.52344"
|
||||
y2="79.556641" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient223"
|
||||
id="linearGradient260"
|
||||
gradientTransform="matrix(0.71303129,0,0,1.2312496,-173.62652,-89.498759)"
|
||||
cx="45.883327"
|
||||
cy="28.869568"
|
||||
fx="45.883327"
|
||||
fy="28.869568"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3804"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-146.05777"
|
||||
y1="77.267624"
|
||||
x2="-126.61523"
|
||||
y2="76.480469" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient261"
|
||||
id="linearGradient271"
|
||||
gradientTransform="matrix(0.98773287,-0.06324662,0.02642229,1.230404,-216.68819,-80.013158)"
|
||||
cx="148.88333"
|
||||
cy="81.869568"
|
||||
fx="148.88333"
|
||||
fy="81.869568"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3806"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-129.76006"
|
||||
y1="90.000977"
|
||||
x2="-129.63141"
|
||||
y2="78.221756" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient223"
|
||||
id="linearGradient1"
|
||||
gradientTransform="matrix(0.69474204,0.27707782,-0.32964185,2.4645588,-139.05338,-247.09727)"
|
||||
cx="135.38333"
|
||||
cy="97.369568"
|
||||
fx="135.38333"
|
||||
fy="97.369568"
|
||||
r="19.467436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3808"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-146.05777"
|
||||
y1="77.267624"
|
||||
x2="-126.61523"
|
||||
y2="76.480469" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient261"
|
||||
id="linearGradient8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-129.76006"
|
||||
y1="90.000977"
|
||||
x2="-129.63141"
|
||||
y2="78.221756" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient223"
|
||||
id="linearGradient9"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-146.05777"
|
||||
y1="77.267624"
|
||||
x2="-126.61523"
|
||||
y2="76.480469" />
|
||||
gradientTransform="matrix(0.71303129,0,0,1.2312496,-173.62652,-89.498759)"
|
||||
cx="45.883327"
|
||||
cy="28.869568"
|
||||
fx="45.883327"
|
||||
fy="28.869568"
|
||||
r="19.467436" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3839">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.8876593"
|
||||
id="feGaussianBlur3841" />
|
||||
</filter>
|
||||
<mask
|
||||
maskUnits="userSpaceOnUse"
|
||||
id="mask3847">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3839)"
|
||||
id="rect3849"
|
||||
width="59.396984"
|
||||
height="59.525551"
|
||||
x="2.4427326"
|
||||
y="2.4174275" />
|
||||
</mask>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.7781746"
|
||||
inkscape:cx="28.042409"
|
||||
inkscape:cy="32.204268"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="990"
|
||||
inkscape:window-x="-11"
|
||||
inkscape:window-y="-11"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
id="metadata2573">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="g268"
|
||||
style="display:inline;stroke-width:1.05234"
|
||||
transform="matrix(0.91662138,-0.24560795,0.24628422,0.91914523,124.68485,-61.319611)">
|
||||
<path
|
||||
d="m -113.25195,68.765625 -26.72657,15.429687 7.96359,9.416205 z"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path264" />
|
||||
<path
|
||||
d="m -113.25195,68.765625 -42.36385,12.251953 15.63728,3.177734 z"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path265" />
|
||||
<path
|
||||
d="m -139.97326,84.192283 v 8.814454 l 5.00816,-2.883522 z"
|
||||
style="fill:#f57900;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path266" />
|
||||
<path
|
||||
d="m -119.19922,74.021484 -12.88672,17.0625 -5.46679,-6.466797 z"
|
||||
style="fill:url(#linearGradient271);fill-rule:evenodd;stroke:#fcaf3e;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path267" />
|
||||
<path
|
||||
d="M -125.28125,73.886719 -140.25,82.529297 -149.00781,80.75 Z"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient1);fill-opacity:1;fill-rule:evenodd;stroke:#fcaf3e;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path268" />
|
||||
</g>
|
||||
<g
|
||||
id="g5"
|
||||
style="display:inline;stroke-width:1.05234"
|
||||
transform="matrix(0.91662138,-0.24560795,0.24628422,0.91914523,148.87574,-85.566978)">
|
||||
<path
|
||||
d="m -113.25195,68.765625 -26.72657,15.429687 7.96359,9.416205 z"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m -113.25195,68.765625 -42.36385,12.251953 15.63728,3.177734 z"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m -139.97326,84.192283 v 8.814454 l 5.00816,-2.883522 z"
|
||||
style="fill:#f57900;fill-rule:evenodd;stroke:#22160c;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m -119.19922,74.021484 -12.88672,17.0625 -5.46679,-6.466797 z"
|
||||
style="fill:url(#linearGradient8);fill-rule:evenodd;stroke:#fcaf3e;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4" />
|
||||
<path
|
||||
d="M -125.28125,73.886719 -140.25,82.529297 -149.00781,80.75 Z"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient9);fill-opacity:1;fill-rule:evenodd;stroke:#fcaf3e;stroke-width:1.57851;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
id="path5" />
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g3817"
|
||||
mask="url(#mask3847)">
|
||||
<g
|
||||
id="g3804">
|
||||
<g
|
||||
id="g3794">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3018"
|
||||
d="m -18.909091,25.818182 4.272727,17 30.454546,-11.545455 z"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3020"
|
||||
d="M -14.636364,42.818182 15.818182,31.272727 -15.090909,28.545455 z"
|
||||
style="fill:#e9a60a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3022"
|
||||
d="m -18.909091,25.818182 4.272727,17 -0.454545,-14.272727 z"
|
||||
style="fill:#4c390a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3024"
|
||||
d="m -15.090909,28.545455 30.909091,2.727272 -34.727273,-5.454545 z"
|
||||
style="fill:#2f240a;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g3794"
|
||||
id="use3800"
|
||||
transform="translate(34.391471,-3.4973989)"
|
||||
width="64"
|
||||
height="64" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#use3800"
|
||||
id="use3802"
|
||||
transform="translate(33.517619,-3.2298738)"
|
||||
width="64"
|
||||
height="64" />
|
||||
</g>
|
||||
<use
|
||||
height="64"
|
||||
width="64"
|
||||
transform="translate(5.4545455,20.636364)"
|
||||
id="use3813"
|
||||
xlink:href="#g3804"
|
||||
y="0"
|
||||
x="0" />
|
||||
<use
|
||||
height="64"
|
||||
width="64"
|
||||
transform="translate(-10.272727,-40.000001)"
|
||||
id="use3815"
|
||||
xlink:href="#use3813"
|
||||
y="0"
|
||||
x="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 8.4 KiB |
1205
src/Mod/AddonManager/Resources/icons/sheetmetal_workbench_icon.svg
Executable file → Normal file
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 46 KiB |
178
src/Mod/AddonManager/Resources/icons/sort_ascending.svg
Executable file → Normal file
@@ -2,117 +2,81 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="ascending.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="true"
|
||||
inkscape:zoom="64"
|
||||
inkscape:cx="9"
|
||||
inkscape:cy="7.40625"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="px"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingx="1"
|
||||
spacingy="1"
|
||||
empcolor="#0099e5"
|
||||
empopacity="0.30196078"
|
||||
color="#0099e5"
|
||||
opacity="0.14901961"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
id="defs1">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Blur"
|
||||
id="filter2"
|
||||
x="-0.2"
|
||||
y="-0.2"
|
||||
width="1.4"
|
||||
height="1.4">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1 1"
|
||||
result="blur"
|
||||
id="feGaussianBlur2" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g4"
|
||||
transform="matrix(-1,0,0,1,64,0)">
|
||||
<path
|
||||
d="M 11.224201,6.8878745 V 34.735474 H 2.9999307 L 15.336335,57.112233 27.672739,34.735474 H 19.44847 V 6.8878745 Z"
|
||||
style="fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 44.551531,57.112126 v -27.8476 h -8.22427 L 48.663665,6.8877674 61.000069,29.264526 H 52.7758 v 27.8476 z"
|
||||
style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 13.224609,8.8886719 h 4.22461 V 36.736328 h 6.835937 L 15.335938,52.96875 6.3867187,36.736328 h 6.8378903 z"
|
||||
style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 48.664062,11.03125 8.949219,16.232422 h -6.83789 v 27.847656 h -4.22461 V 27.263672 h -6.835937 z"
|
||||
style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path4" />
|
||||
</g>
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 11,3 v 7 H 10 L 11.5,14.015625 13,10 H 12 V 3 Z"
|
||||
style="fill-rule:evenodd;stroke-width:0.48;stroke-linecap:square;stroke-miterlimit:100;stroke-dashoffset:3.45;fill:#999999;fill-opacity:1"
|
||||
id="path4" />
|
||||
<path
|
||||
d="m 5,13.015625 v -7 H 6 L 4.5,2 3,6.015625 h 1 v 7 z"
|
||||
style="fill-rule:evenodd;stroke-width:0.48;stroke-linecap:square;stroke-miterlimit:100;stroke-dashoffset:3.45;fill:#000000;fill-opacity:1"
|
||||
id="path4-0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 2.3 KiB |
178
src/Mod/AddonManager/Resources/icons/sort_descending.svg
Executable file → Normal file
@@ -2,117 +2,81 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg2869"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
viewBox="0 0 64 64"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="descending.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="true"
|
||||
inkscape:zoom="64"
|
||||
inkscape:cx="9"
|
||||
inkscape:cy="7.40625"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="px"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingx="1"
|
||||
spacingy="1"
|
||||
empcolor="#0099e5"
|
||||
empopacity="0.30196078"
|
||||
color="#0099e5"
|
||||
opacity="0.14901961"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs2871">
|
||||
<linearGradient
|
||||
id="linearGradient5">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch18">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="swatch15">
|
||||
<stop
|
||||
style="stop-color:#3d0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5-1">
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-9">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3838-8" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3840-1" />
|
||||
</linearGradient>
|
||||
id="defs1">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Blur"
|
||||
id="filter2"
|
||||
x="-0.2"
|
||||
y="-0.2"
|
||||
width="1.4"
|
||||
height="1.4">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1 1"
|
||||
result="blur"
|
||||
id="feGaussianBlur2" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata2874">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[maxwxyz]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>2024</dc:date>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer3"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g4"
|
||||
transform="matrix(1,0,0,-1,0,64)">
|
||||
<path
|
||||
d="M 11.224201,6.8878745 V 34.735474 H 2.9999307 L 15.336335,57.112233 27.672739,34.735474 H 19.44847 V 6.8878745 Z"
|
||||
style="fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 44.551531,57.112126 v -27.8476 h -8.22427 L 48.663665,6.8877674 61.000069,29.264526 H 52.7758 v 27.8476 z"
|
||||
style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 13.224609,8.8886719 h 4.22461 V 36.736328 h 6.835937 L 15.335938,52.96875 6.3867187,36.736328 h 6.8378903 z"
|
||||
style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 48.664062,11.03125 8.949219,16.232422 h -6.83789 v 27.847656 h -4.22461 V 27.263672 h -6.835937 z"
|
||||
style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:100;stroke-dasharray:none;stroke-dashoffset:3.45"
|
||||
id="path4" />
|
||||
</g>
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 11,3 v 7 H 10 L 11.5,14.015625 13,10 H 12 V 3 Z"
|
||||
style="fill-rule:evenodd;stroke-width:0.48;stroke-linecap:square;stroke-miterlimit:100;stroke-dashoffset:3.45"
|
||||
id="path4" />
|
||||
<path
|
||||
d="m 5,13.015625 v -7 H 6 L 4.5,2 3,6.015625 h 1 v 7 z"
|
||||
style="fill-rule:evenodd;stroke-width:0.48;stroke-linecap:square;stroke-miterlimit:100;stroke-dashoffset:3.45;fill:#999999;fill-opacity:1"
|
||||
id="path4-0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -1,71 +0,0 @@
|
||||
#***************************************************************************
|
||||
#* Copyright (c) 2011 Yorik van Havre <yorik@uncreated.net> *
|
||||
#* *
|
||||
#* 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 *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
__title__ = "FreeCAD Arch API"
|
||||
__author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
## \defgroup ARCH Arch
|
||||
# \ingroup PYTHONWORKBENCHES
|
||||
# \brief Architecture and BIM tools
|
||||
#
|
||||
# This module provides tools specialized in Building Information Modeling (BIM).
|
||||
# such as convenience tools to build walls, windows or structures, and
|
||||
# IFC import/export capabilities.
|
||||
|
||||
'''The Arch module provides tools specialized in BIM modeling.'''
|
||||
|
||||
import FreeCAD
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
FreeCADGui.updateLocale()
|
||||
|
||||
from ArchWall import *
|
||||
from ArchFloor import *
|
||||
from ArchFence import *
|
||||
from ArchProject import *
|
||||
from ArchSite import *
|
||||
from ArchBuilding import *
|
||||
from ArchStructure import *
|
||||
from ArchProfile import *
|
||||
from ArchCommands import *
|
||||
from ArchSectionPlane import *
|
||||
from ArchWindow import *
|
||||
from ArchWindowPresets import *
|
||||
from ArchAxis import *
|
||||
from ArchAxisSystem import *
|
||||
from ArchGrid import *
|
||||
from ArchRoof import *
|
||||
from ArchSpace import *
|
||||
from ArchStairs import *
|
||||
from ArchRebar import *
|
||||
from ArchFrame import *
|
||||
from ArchPanel import *
|
||||
from ArchEquipment import *
|
||||
from ArchCutPlane import *
|
||||
from ArchMaterial import *
|
||||
from ArchSchedule import *
|
||||
from ArchPrecast import *
|
||||
from ArchPipe import *
|
||||
from ArchBuildingPart import *
|
||||
from ArchReference import *
|
||||
from ArchTruss import *
|
||||
from ArchCurtainWall import *
|
||||
@@ -1,135 +0,0 @@
|
||||
IF (BUILD_GUI)
|
||||
PYSIDE_WRAP_RC(Arch_QRC_SRCS Resources/Arch.qrc)
|
||||
ENDIF (BUILD_GUI)
|
||||
|
||||
SET(Arch_SRCS
|
||||
Init.py
|
||||
InitGui.py
|
||||
ArchComponent.py
|
||||
ArchIFC.py
|
||||
ArchIFCView.py
|
||||
ArchIFCSchema.py
|
||||
ArchProject.py
|
||||
ArchWall.py
|
||||
importIFC.py
|
||||
importIFClegacy.py
|
||||
importIFCHelper.py
|
||||
importIFCmulticore.py
|
||||
exportIFCHelper.py
|
||||
Arch.py
|
||||
ArchBuilding.py
|
||||
ArchFloor.py
|
||||
ArchSite.py
|
||||
ArchStructure.py
|
||||
ArchCommands.py
|
||||
ArchSectionPlane.py
|
||||
importDAE.py
|
||||
importOBJ.py
|
||||
ArchWindow.py
|
||||
ArchWindowPresets.py
|
||||
ArchAxis.py
|
||||
ArchAxisSystem.py
|
||||
ArchGrid.py
|
||||
ArchVRM.py
|
||||
ArchRoof.py
|
||||
ArchStairs.py
|
||||
importWebGL.py
|
||||
importJSON.py
|
||||
ArchSpace.py
|
||||
ArchRebar.py
|
||||
TestArch.py
|
||||
ArchFrame.py
|
||||
ArchPanel.py
|
||||
ArchEquipment.py
|
||||
ArchCutPlane.py
|
||||
ArchMaterial.py
|
||||
ArchSchedule.py
|
||||
ArchProfile.py
|
||||
import3DS.py
|
||||
ArchPrecast.py
|
||||
importSH3D.py
|
||||
ArchPipe.py
|
||||
ArchNesting.py
|
||||
ArchBuildingPart.py
|
||||
ArchReference.py
|
||||
ArchFence.py
|
||||
OfflineRenderingUtils.py
|
||||
exportIFC.py
|
||||
ArchTruss.py
|
||||
ArchCurtainWall.py
|
||||
importSHP.py
|
||||
exportIFCStructuralTools.py
|
||||
ifc_objects.py
|
||||
ifc_viewproviders.py
|
||||
ArchSketchObject.py
|
||||
)
|
||||
|
||||
SET(Dice3DS_SRCS
|
||||
Dice3DS/__init__.py
|
||||
Dice3DS/util.py
|
||||
Dice3DS/dom3ds.py
|
||||
)
|
||||
|
||||
SET(Arch_presets
|
||||
Presets/profiles.csv
|
||||
Presets/pset_definitions.csv
|
||||
Presets/ifc_products_IFC2X3.json
|
||||
Presets/ifc_products_IFC4.json
|
||||
Presets/ifc_types_IFC2X3.json
|
||||
Presets/ifc_types_IFC4.json
|
||||
Presets/ifc_contexts_IFC2X3.json
|
||||
Presets/ifc_contexts_IFC4.json
|
||||
)
|
||||
|
||||
SOURCE_GROUP("" FILES ${Arch_SRCS})
|
||||
|
||||
SET(ArchGuiIcon_SVG
|
||||
Resources/icons/ArchWorkbench.svg
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(Arch ALL
|
||||
SOURCES ${Arch_SRCS} ${Arch_QRC_SRCS} ${Dice3DS_SRCS} ${Arch_presets} ${ArchGuiIcon_SVG}
|
||||
)
|
||||
|
||||
fc_copy_sources(Arch "${CMAKE_BINARY_DIR}/Mod/Arch" ${Arch_SRCS})
|
||||
fc_copy_sources(Arch "${CMAKE_BINARY_DIR}/Mod/Arch" ${Dice3DS_SRCS})
|
||||
fc_copy_sources(Arch "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Arch" ${ArchGuiIcon_SVG})
|
||||
|
||||
fc_target_copy_resource(Arch
|
||||
${CMAKE_SOURCE_DIR}/src/Mod/Arch
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Arch
|
||||
${Arch_presets}
|
||||
)
|
||||
|
||||
IF (BUILD_GUI)
|
||||
fc_target_copy_resource(Arch
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}/Mod/Arch
|
||||
Arch_rc.py)
|
||||
ENDIF (BUILD_GUI)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${Arch_SRCS}
|
||||
${Arch_QRC_SRCS}
|
||||
DESTINATION Mod/Arch
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${Dice3DS_SRCS}
|
||||
DESTINATION Mod/Arch/Dice3DS
|
||||
)
|
||||
INSTALL(
|
||||
DIRECTORY
|
||||
Presets
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_DATADIR}/Mod/Arch
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${ArchGuiIcon_SVG}
|
||||
DESTINATION
|
||||
"${CMAKE_INSTALL_DATADIR}/Mod/Arch/Resources/icons"
|
||||
)
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#***************************************************************************
|
||||
#* Copyright (c) 2011 Yorik van Havre <yorik@uncreated.net> *
|
||||
#* *
|
||||
#* 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 *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# add import/export types
|
||||
FreeCAD.addImportType("Industry Foundation Classes (*.ifc *.IFC)","importIFC")
|
||||
FreeCAD.addExportType("Industry Foundation Classes (*.ifc)","exportIFC")
|
||||
FreeCAD.addExportType("Industry Foundation Classes - IFCJSON (*.ifcJSON)","exportIFC")
|
||||
FreeCAD.addImportType("Wavefront OBJ - Arch module (*.obj *.OBJ)","importOBJ")
|
||||
FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importOBJ")
|
||||
FreeCAD.addExportType("WebGL file (*.html)","importWebGL")
|
||||
FreeCAD.addExportType("JavaScript Object Notation (*.json)","importJSON")
|
||||
FreeCAD.addImportType("Collada (*.dae *.DAE)","importDAE")
|
||||
FreeCAD.addExportType("Collada (*.dae)","importDAE")
|
||||
FreeCAD.addImportType("3D Studio mesh (*.3ds *.3DS)","import3DS")
|
||||
FreeCAD.addImportType("SweetHome3D XML export (*.zip *.ZIP)","importSH3D")
|
||||
FreeCAD.addImportType("Shapefile (*.shp *.SHP)","importSHP")
|
||||
@@ -1,266 +0,0 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2011 Yorik van Havre <yorik@uncreated.net> *
|
||||
# * *
|
||||
# * 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 *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
"""Initialization of the Arch workbench (graphical interface)."""
|
||||
|
||||
import os
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
|
||||
|
||||
class ArchWorkbench(FreeCADGui.Workbench):
|
||||
"""The Arch workbench definition."""
|
||||
|
||||
def __init__(self):
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
|
||||
__dirname__ = os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch")
|
||||
_tooltip = ("The Arch workbench is used to model "
|
||||
"architectural components, and entire buildings")
|
||||
self.__class__.Icon = os.path.join(__dirname__,
|
||||
"Resources", "icons",
|
||||
"ArchWorkbench.svg")
|
||||
self.__class__.MenuText = QT_TRANSLATE_NOOP("Arch", "Arch")
|
||||
self.__class__.ToolTip = QT_TRANSLATE_NOOP("Arch", _tooltip)
|
||||
|
||||
def Initialize(self):
|
||||
"""When the workbench is first loaded."""
|
||||
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
|
||||
import Draft_rc
|
||||
import DraftTools
|
||||
import DraftGui
|
||||
import Arch_rc
|
||||
import Arch
|
||||
|
||||
# Load Reinforcement WB translations
|
||||
try:
|
||||
import RebarTools
|
||||
RebarTools.load_translations()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
from ArchStructure import _ArchStructureGroupCommand
|
||||
from ArchAxis import _ArchAxisGroupCommand
|
||||
from ArchPanel import CommandPanelGroup
|
||||
from ArchMaterial import _ArchMaterialToolsCommand
|
||||
from ArchPipe import _ArchPipeGroupCommand
|
||||
|
||||
stru_group = _ArchStructureGroupCommand
|
||||
axis_group = _ArchAxisGroupCommand
|
||||
pan_group = CommandPanelGroup
|
||||
mat_group = _ArchMaterialToolsCommand
|
||||
pipe_group = _ArchPipeGroupCommand
|
||||
|
||||
# Set up command lists
|
||||
self.archtools = ["Arch_Wall",
|
||||
([QT_TRANSLATE_NOOP("Workbench", "Structure tools")],
|
||||
list(stru_group.GetCommands(stru_group))), # tuple len=2: submenu
|
||||
("Arch_StructureTools", ), # tuple len=1: toolbar flyout
|
||||
"Arch_Rebar_Submenu", # will be replaced or removed
|
||||
"Arch_Rebar", # may be replaced
|
||||
"Arch_CurtainWall",
|
||||
"Arch_BuildingPart",
|
||||
"Arch_Project",
|
||||
"Arch_Site",
|
||||
"Arch_Building",
|
||||
"Arch_Floor",
|
||||
"Arch_Reference",
|
||||
"Arch_Window",
|
||||
"Arch_Roof",
|
||||
([QT_TRANSLATE_NOOP("Workbench", "Axis tools")],
|
||||
list(axis_group.GetCommands(axis_group))),
|
||||
("Arch_AxisTools", ),
|
||||
"Arch_SectionPlane",
|
||||
"Arch_Space",
|
||||
"Arch_Stairs",
|
||||
([QT_TRANSLATE_NOOP("Workbench", "Panel tools")],
|
||||
list(pan_group.GetCommands(pan_group))),
|
||||
("Arch_PanelTools", ),
|
||||
"Arch_Equipment",
|
||||
"Arch_Frame",
|
||||
"Arch_Fence",
|
||||
"Arch_Truss",
|
||||
"Arch_Profile",
|
||||
([QT_TRANSLATE_NOOP("Workbench", "Material tools")],
|
||||
list(mat_group.GetCommands(mat_group))),
|
||||
("Arch_MaterialTools", ),
|
||||
"Arch_Schedule",
|
||||
([QT_TRANSLATE_NOOP("Workbench", "Pipe tools")],
|
||||
list(pipe_group.GetCommands(pipe_group))),
|
||||
("Arch_PipeTools", ),
|
||||
"Arch_CutPlane",
|
||||
"Arch_Add",
|
||||
"Arch_Remove",
|
||||
"Arch_Survey"]
|
||||
|
||||
self.utilities = ["Arch_Component",
|
||||
"Arch_CloneComponent",
|
||||
"Arch_SplitMesh",
|
||||
"Arch_MeshToShape",
|
||||
"Arch_SelectNonSolidMeshes",
|
||||
"Arch_RemoveShape",
|
||||
"Arch_CloseHoles",
|
||||
"Arch_MergeWalls",
|
||||
"Arch_Check",
|
||||
"Arch_ToggleIfcBrepFlag",
|
||||
"Arch_3Views",
|
||||
"Arch_IfcSpreadsheet",
|
||||
"Arch_ToggleSubs"]
|
||||
|
||||
# Add the rebar tools from the Reinforcement addon, if available
|
||||
try:
|
||||
import RebarTools
|
||||
except Exception:
|
||||
del self.archtools[3] # remove "Arch_Rebar_Submenu"
|
||||
else:
|
||||
class RebarGroupCommand:
|
||||
def GetCommands(self):
|
||||
return tuple(RebarTools.RebarCommands + ["Arch_Rebar"])
|
||||
|
||||
def GetResources(self):
|
||||
return {'MenuText': QT_TRANSLATE_NOOP("Arch_RebarTools", "Rebar tools"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_RebarTools",
|
||||
"Create various types of rebars, "
|
||||
"including U-shaped, L-shaped, and stirrup")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
FreeCADGui.addCommand('Arch_RebarTools', RebarGroupCommand())
|
||||
self.archtools[3] = ([QT_TRANSLATE_NOOP("Workbench", "Rebar tools")],
|
||||
RebarTools.RebarCommands + ["Arch_Rebar"])
|
||||
self.archtools[4] = ("Arch_RebarTools", )
|
||||
|
||||
# Set up Draft command lists
|
||||
import draftutils.init_tools as it
|
||||
self.draft_drawing_commands = it.get_draft_drawing_commands()
|
||||
self.draft_annotation_commands = it.get_draft_annotation_commands()
|
||||
self.draft_modification_commands = it.get_draft_modification_commands()
|
||||
self.draft_utility_commands = it.get_draft_utility_commands_menu()
|
||||
self.draft_context_commands = it.get_draft_context_commands()
|
||||
self.draft_snap_commands = it.get_draft_snap_commands()
|
||||
|
||||
# Set up toolbars
|
||||
it.init_toolbar(self,
|
||||
QT_TRANSLATE_NOOP("Workbench", "Arch tools"),
|
||||
self.archtools)
|
||||
it.init_toolbar(self,
|
||||
QT_TRANSLATE_NOOP("Workbench", "Draft creation tools"),
|
||||
self.draft_drawing_commands)
|
||||
it.init_toolbar(self,
|
||||
QT_TRANSLATE_NOOP("Workbench", "Draft annotation tools"),
|
||||
self.draft_annotation_commands)
|
||||
it.init_toolbar(self,
|
||||
QT_TRANSLATE_NOOP("Workbench", "Draft modification tools"),
|
||||
self.draft_modification_commands)
|
||||
it.init_toolbar(self,
|
||||
QT_TRANSLATE_NOOP("Workbench", "Draft snap"),
|
||||
self.draft_snap_commands)
|
||||
|
||||
# Set up menus
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Arch"),
|
||||
QT_TRANSLATE_NOOP("Workbench", "Utilities")],
|
||||
self.utilities)
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Arch")],
|
||||
self.archtools)
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Draft"),
|
||||
QT_TRANSLATE_NOOP("Workbench", "Creation")],
|
||||
self.draft_drawing_commands)
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Draft"),
|
||||
QT_TRANSLATE_NOOP("Workbench", "Annotation")],
|
||||
self.draft_annotation_commands)
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Draft"),
|
||||
QT_TRANSLATE_NOOP("Workbench", "Modification")],
|
||||
self.draft_modification_commands)
|
||||
it.init_menu(self,
|
||||
[QT_TRANSLATE_NOOP("Workbench", "&Draft"),
|
||||
QT_TRANSLATE_NOOP("Workbench", "Utilities")],
|
||||
self.draft_utility_commands)
|
||||
|
||||
FreeCADGui.addIconPath(":/icons")
|
||||
FreeCADGui.addLanguagePath(":/translations")
|
||||
|
||||
# Set up preferences pages
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
if not hasattr(FreeCADGui.draftToolBar, "loadedArchPreferences"):
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-arch.ui", QT_TRANSLATE_NOOP("QObject", "Arch"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-archdefaults.ui", QT_TRANSLATE_NOOP("QObject", "Arch"))
|
||||
FreeCADGui.draftToolBar.loadedArchPreferences = True
|
||||
if not hasattr(FreeCADGui.draftToolBar, "loadedPreferences"):
|
||||
from draftutils import params
|
||||
params._param_observer_start()
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draft.ui", QT_TRANSLATE_NOOP("QObject", "Draft"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftinterface.ui", QT_TRANSLATE_NOOP("QObject", "Draft"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftsnap.ui", QT_TRANSLATE_NOOP("QObject", "Draft"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftvisual.ui", QT_TRANSLATE_NOOP("QObject", "Draft"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-drafttexts.ui", QT_TRANSLATE_NOOP("QObject", "Draft"))
|
||||
FreeCADGui.draftToolBar.loadedPreferences = True
|
||||
|
||||
FreeCAD.Console.PrintLog('Loading Arch workbench, done.\n')
|
||||
|
||||
def Activated(self):
|
||||
"""When entering the workbench."""
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
FreeCADGui.draftToolBar.Activated()
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.show()
|
||||
import WorkingPlane
|
||||
WorkingPlane._view_observer_start()
|
||||
FreeCAD.Console.PrintLog("Arch workbench activated.\n")
|
||||
|
||||
def Deactivated(self):
|
||||
"""When leaving the workbench."""
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
FreeCADGui.draftToolBar.Deactivated()
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.hide()
|
||||
import WorkingPlane
|
||||
WorkingPlane._view_observer_stop()
|
||||
FreeCAD.Console.PrintLog("Arch workbench deactivated.\n")
|
||||
|
||||
def ContextMenu(self, recipient):
|
||||
"""Define an optional custom context menu."""
|
||||
self.appendContextMenu("Utilities", self.draft_context_commands)
|
||||
|
||||
def GetClassName(self):
|
||||
"""Type of workbench."""
|
||||
return "Gui::PythonWorkbench"
|
||||
|
||||
|
||||
FreeCADGui.addWorkbench(ArchWorkbench)
|
||||
|
||||
# Preference pages for importing and exporting various file formats
|
||||
# are independent of the loading of the workbench and can be loaded at startup
|
||||
import Arch_rc
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-ifc.ui", QT_TRANSLATE_NOOP("QObject", "Import-Export"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-ifc-export.ui", QT_TRANSLATE_NOOP("QObject", "Import-Export"))
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-dae.ui", QT_TRANSLATE_NOOP("QObject", "Import-Export"))
|
||||
|
||||
FreeCAD.__unit_test__ += ["TestArch"]
|
||||
|
Before Width: | Height: | Size: 6.5 KiB |
@@ -46,6 +46,9 @@
|
||||
|
||||
#include <BRepAdaptor_Curve.hxx>
|
||||
#include <BRepAdaptor_Surface.hxx>
|
||||
#include <gp_Circ.hxx>
|
||||
#include <gp_Cylinder.hxx>
|
||||
#include <gp_Sphere.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Face.hxx>
|
||||
|
||||
|
||||
1139
src/Mod/BIM/Arch.py
Normal file
@@ -34,9 +34,6 @@ if FreeCAD.GuiUp:
|
||||
from draftutils.translate import translate
|
||||
from pivy import coin
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
|
||||
from ArchAxisSystem import _CommandAxisSystem
|
||||
from ArchGrid import CommandArchGrid
|
||||
else:
|
||||
# \cond
|
||||
def translate(ctxt,txt):
|
||||
@@ -57,58 +54,6 @@ __url__ = "https://www.freecad.org"
|
||||
# An axis is a collection of planar axes with a number/tag
|
||||
|
||||
|
||||
def makeAxis(num=5,size=1000,name=None):
|
||||
|
||||
'''makeAxis([num],[size],[name]): makes an Axis set
|
||||
based on the given number of axes and interval distances'''
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Axis")
|
||||
obj.Label = name if name else translate("Arch","Axes")
|
||||
_Axis(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderAxis(obj.ViewObject)
|
||||
if num:
|
||||
dist = []
|
||||
angles = []
|
||||
for i in range(num):
|
||||
if i == 0:
|
||||
dist.append(0)
|
||||
else:
|
||||
dist.append(float(size))
|
||||
angles.append(float(0))
|
||||
obj.Distances = dist
|
||||
obj.Angles = angles
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandAxis:
|
||||
|
||||
"the Arch Axis command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Axis',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Axis","Axis"),
|
||||
'Accel': "A, X",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Axis","Creates a set of axes")}
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Axis"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
|
||||
FreeCADGui.doCommand("Arch.makeAxis()")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
|
||||
class _Axis:
|
||||
|
||||
"The Axis object"
|
||||
@@ -812,21 +757,3 @@ class _AxisTaskPanel:
|
||||
QtGui.QApplication.translate("Arch", "Angle", None),
|
||||
QtGui.QApplication.translate("Arch", "Label", None)])
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Axis',_CommandAxis())
|
||||
FreeCADGui.addCommand('Arch_AxisSystem',_CommandAxisSystem())
|
||||
FreeCADGui.addCommand('Arch_Grid',CommandArchGrid())
|
||||
|
||||
class _ArchAxisGroupCommand:
|
||||
|
||||
def GetCommands(self):
|
||||
return tuple(['Arch_Axis','Arch_AxisSystem','Arch_Grid'])
|
||||
def GetResources(self):
|
||||
return { 'MenuText': QT_TRANSLATE_NOOP("Arch_AxisTools",'Axis tools'),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_AxisTools",'Axis tools')
|
||||
}
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
FreeCADGui.addCommand('Arch_AxisTools', _ArchAxisGroupCommand())
|
||||
@@ -48,55 +48,6 @@ __url__ = "https://www.freecad.org"
|
||||
# An axis system is a collection of multiple axes
|
||||
|
||||
|
||||
def makeAxisSystem(axes,name=None):
|
||||
|
||||
'''makeAxisSystem(axes,[name]): makes a system from the given list of axes'''
|
||||
|
||||
if not isinstance(axes,list):
|
||||
axes = [axes]
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","AxisSystem")
|
||||
obj.Label = name if name else translate("Arch","Axis System")
|
||||
_AxisSystem(obj)
|
||||
obj.Axes = axes
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderAxisSystem(obj.ViewObject)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandAxisSystem:
|
||||
|
||||
"the Arch Axis System command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Axis_System',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_AxisSystem","Axis System"),
|
||||
'Accel': "X, S",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_AxisSystem","Creates an axis system from a set of axes")}
|
||||
|
||||
def Activated(self):
|
||||
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
s = "["
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
if Draft.getType(o) != "Axis":
|
||||
FreeCAD.Console.PrintError(translate("Arch","Only axes must be selected")+"\n")
|
||||
return
|
||||
s += "FreeCAD.ActiveDocument."+o.Name+","
|
||||
s += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Axis System"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeAxisSystem("+s+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
else:
|
||||
FreeCAD.Console.PrintError(translate("Arch","Please select at least one axis")+"\n")
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
|
||||
class _AxisSystem:
|
||||
|
||||
"The Axis System object"
|
||||
@@ -197,122 +197,6 @@ BuildingTypes = ['Undefined',
|
||||
]
|
||||
|
||||
|
||||
def makeBuildingPart(objectslist=None,baseobj=None,name=None):
|
||||
|
||||
'''makeBuildingPart([objectslist],[name]): creates a buildingPart including the
|
||||
objects from the given list.'''
|
||||
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::GeometryPython","BuildingPart")
|
||||
#obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","BuildingPart")
|
||||
obj.Label = name if name else translate("Arch","BuildingPart")
|
||||
BuildingPart(obj)
|
||||
obj.IfcType = "Building Element Part"
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderBuildingPart(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.addObjects(objectslist)
|
||||
return obj
|
||||
|
||||
|
||||
def makeFloor(objectslist=None,baseobj=None,name=None):
|
||||
|
||||
"""overwrites ArchFloor.makeFloor"""
|
||||
|
||||
obj = makeBuildingPart(objectslist)
|
||||
obj.Label = name if name else translate("Arch","Floor")
|
||||
obj.IfcType = "Building Storey"
|
||||
return obj
|
||||
|
||||
|
||||
def makeBuilding(objectslist=None,baseobj=None,name=None):
|
||||
|
||||
"""overwrites ArchBuilding.makeBuilding"""
|
||||
|
||||
obj = makeBuildingPart(objectslist)
|
||||
obj.Label = name if name else translate("Arch","Building")
|
||||
obj.IfcType = "Building"
|
||||
obj.addProperty("App::PropertyEnumeration","BuildingType","Building",QT_TRANSLATE_NOOP("App::Property","The type of this building"))
|
||||
obj.BuildingType = BuildingTypes
|
||||
if FreeCAD.GuiUp:
|
||||
obj.ViewObject.ShowLevel = False
|
||||
obj.ViewObject.ShowLabel = False
|
||||
return obj
|
||||
|
||||
|
||||
def convertFloors(floor=None):
|
||||
|
||||
"""convert the given Floor or Building (or all Arch Floors from the active document if none is given) into BuildingParts"""
|
||||
|
||||
todel = []
|
||||
if floor:
|
||||
objset = [floor]
|
||||
else:
|
||||
objset = FreeCAD.ActiveDocument.Objects
|
||||
for obj in objset:
|
||||
if Draft.getType(obj) in ["Floor","Building"]:
|
||||
nobj = makeBuildingPart(obj.Group)
|
||||
if Draft.getType(obj) == "Floor":
|
||||
nobj.IfcType = "Building Storey"
|
||||
else:
|
||||
nobj.IfcType = "Building"
|
||||
nobj.addProperty("App::PropertyEnumeration","BuildingType","Building",QT_TRANSLATE_NOOP("App::Property","The type of this building"))
|
||||
nobj.BuildingType = BuildingTypes
|
||||
label = obj.Label
|
||||
for parent in obj.InList:
|
||||
if hasattr(parent,"Group"):
|
||||
if obj in parent.Group:
|
||||
parent.addObject(nobj)
|
||||
#g = parent.Group
|
||||
#g.append(nobj)
|
||||
#parent.Group = g
|
||||
else:
|
||||
print("Warning: couldn't add new object '"+label+"' to parent object '"+parent.Label+"'")
|
||||
todel.append(obj.Name)
|
||||
if obj.ViewObject:
|
||||
obj.ViewObject.Proxy.Object = None # some bug makes this trigger even efter the object has been deleted...
|
||||
obj.Label = obj.Label+" to delete" # in case FreeCAD doesn't allow 2 objs with same label
|
||||
nobj.Label = label
|
||||
for n in todel:
|
||||
from DraftGui import todo
|
||||
todo.delay(FreeCAD.ActiveDocument.removeObject,n)
|
||||
|
||||
|
||||
|
||||
class CommandBuildingPart:
|
||||
|
||||
|
||||
"the Arch BuildingPart command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_BuildingPart',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_BuildingPart","BuildingPart"),
|
||||
'Accel': "B, P",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_BuildingPart","Creates a BuildingPart including selected objects")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
ss = "[ "
|
||||
for o in sel:
|
||||
ss += "FreeCAD.ActiveDocument." + o.Name + ", "
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create BuildingPart"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("WorkingPlane")
|
||||
FreeCADGui.doCommand("obj = Arch.makeBuildingPart("+ss+")")
|
||||
FreeCADGui.doCommand("obj.Placement = WorkingPlane.get_working_plane().get_placement()")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
|
||||
class BuildingPart(ArchIFC.IfcProduct):
|
||||
|
||||
|
||||
@@ -335,7 +219,7 @@ class BuildingPart(ArchIFC.IfcProduct):
|
||||
obj.addProperty("App::PropertyBool","HeightPropagate","Children",QT_TRANSLATE_NOOP("App::Property","If true, the height value propagates to contained objects if the height of those objects is set to 0"))
|
||||
obj.HeightPropagate = True
|
||||
if not "LevelOffset" in pl:
|
||||
obj.addProperty("App::PropertyLength","LevelOffset","BuildingPart",QT_TRANSLATE_NOOP("App::Property","The level of the (0,0,0) point of this level"))
|
||||
obj.addProperty("App::PropertyDistance","LevelOffset","BuildingPart",QT_TRANSLATE_NOOP("App::Property","The level of the (0,0,0) point of this level"))
|
||||
if not "Area" in pl:
|
||||
obj.addProperty("App::PropertyArea","Area", "BuildingPart",QT_TRANSLATE_NOOP("App::Property","The computed floor area of this floor"))
|
||||
if not "Description" in pl:
|
||||
@@ -1100,7 +984,3 @@ class ViewProviderBuildingPart:
|
||||
f.close()
|
||||
obj.SavedInventor = tf
|
||||
os.remove(tf)
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_BuildingPart',CommandBuildingPart())
|
||||
@@ -1324,298 +1324,6 @@ def printWarning( message ):
|
||||
if FreeCAD.GuiUp :
|
||||
QtGui.QMessageBox.warning( None , "" , message )
|
||||
|
||||
|
||||
# command definitions ###############################################
|
||||
|
||||
|
||||
class _CommandAdd:
|
||||
"the Arch Add command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Add',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Add","Add component"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Add","Adds the selected components to the active object")}
|
||||
|
||||
def IsActive(self):
|
||||
return len(FreeCADGui.Selection.getSelection()) > 1
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if Draft.getType(sel[-1]) == "Space":
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Add space boundary"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.addSpaceBoundaries( FreeCAD.ActiveDocument."+sel[-1].Name+", FreeCADGui.Selection.getSelectionEx() )")
|
||||
else:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Grouping"))
|
||||
if not mergeCells(sel):
|
||||
host = sel.pop()
|
||||
ss = "["
|
||||
for o in sel:
|
||||
if len(ss) > 1:
|
||||
ss += ","
|
||||
ss += "FreeCAD.ActiveDocument."+o.Name
|
||||
ss += "]"
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.addComponents("+ss+",FreeCAD.ActiveDocument."+host.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandRemove:
|
||||
"the Arch Add command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Remove',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Remove","Remove component"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Remove","Remove the selected components from their parents, or create a hole in a component")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if Draft.getType(sel[-1]) == "Space":
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Remove space boundary"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.removeSpaceBoundaries( FreeCAD.ActiveDocument."+sel[-1].Name+", FreeCADGui.Selection.getSelection() )")
|
||||
else:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Ungrouping"))
|
||||
if len(sel) > 1:
|
||||
host = sel.pop()
|
||||
ss = "["
|
||||
for o in sel:
|
||||
if len(ss) > 1:
|
||||
ss += ","
|
||||
ss += "FreeCAD.ActiveDocument."+o.Name
|
||||
ss += "]"
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.removeComponents("+ss+",FreeCAD.ActiveDocument."+host.Name+")")
|
||||
else:
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.removeComponents(FreeCAD.ActiveDocument."+sel[0].Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandSplitMesh:
|
||||
"the Arch SplitMesh command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_SplitMesh',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SplitMesh","Split Mesh"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SplitMesh","Splits selected meshes into independent components")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Split Mesh"))
|
||||
for obj in sel:
|
||||
n = obj.Name
|
||||
nobjs = splitMesh(obj)
|
||||
if len(nobjs) > 1:
|
||||
g = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroup",n)
|
||||
for o in nobjs:
|
||||
g.addObject(o)
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandMeshToShape:
|
||||
"the Arch MeshToShape command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_MeshToShape',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_MeshToShape","Mesh to Shape"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_MeshToShape","Turns selected meshes into Part Shape objects")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
f = FreeCADGui.Selection.getSelection()[0]
|
||||
g = None
|
||||
if f.isDerivedFrom("App::DocumentObjectGroup"):
|
||||
g = f
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
for o in f.OutList:
|
||||
FreeCADGui.Selection.addSelection(o)
|
||||
else:
|
||||
if f.InList:
|
||||
if f.InList[0].isDerivedFrom("App::DocumentObjectGroup"):
|
||||
g = f.InList[0]
|
||||
fast = params.get_param_arch("ConversionFast")
|
||||
tol = params.get_param_arch("ConversionTolerance")
|
||||
flat = params.get_param_arch("ConversionFlat")
|
||||
cut = params.get_param_arch("ConversionCut")
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Mesh to Shape"))
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
newobj = meshToShape(obj,True,fast,tol,flat,cut)
|
||||
if g and newobj:
|
||||
g.addObject(newobj)
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
|
||||
class _CommandSelectNonSolidMeshes:
|
||||
"the Arch SelectNonSolidMeshes command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap': 'Arch_SelectNonManifold.svg',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Selects all non-manifold meshes from the document or from the selected groups")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
msel = []
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
if o.isDerivedFrom("App::DocumentObjectGroup"):
|
||||
msel.extend(o.OutList)
|
||||
if not msel:
|
||||
msel = FreeCAD.ActiveDocument.Objects
|
||||
sel = []
|
||||
for o in msel:
|
||||
if o.isDerivedFrom("Mesh::Feature"):
|
||||
if (not o.Mesh.isSolid()) or o.Mesh.hasNonManifolds():
|
||||
sel.append(o)
|
||||
if sel:
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
for o in sel:
|
||||
FreeCADGui.Selection.addSelection(o)
|
||||
|
||||
|
||||
class _CommandRemoveShape:
|
||||
"the Arch RemoveShape command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_RemoveShape',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Remove Shape from Arch"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Removes cubic shapes from Arch components")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
removeShape(sel)
|
||||
|
||||
|
||||
class _CommandCloseHoles:
|
||||
"the Arch CloseHoles command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_CloseHoles',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Closes holes in open shapes, turning them solids")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
s = closeHole(o.Shape)
|
||||
if s:
|
||||
o.Shape = s
|
||||
|
||||
|
||||
class _CommandCheck:
|
||||
"the Arch Check command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Check',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Check"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Checks the selected objects for problems")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
result = check(FreeCADGui.Selection.getSelection())
|
||||
if not result:
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","All good! No problems found")))
|
||||
else:
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
for i in result:
|
||||
FreeCAD.Console.PrintWarning("Object "+i[0].Name+" ("+i[0].Label+") "+i[1])
|
||||
FreeCADGui.Selection.addSelection(i[0])
|
||||
|
||||
|
||||
class _CommandSurvey:
|
||||
"the Arch Survey command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Survey',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Survey","Survey"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Survey","Starts survey")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommandGui("Arch.survey()")
|
||||
|
||||
|
||||
class _ToggleIfcBrepFlag:
|
||||
"the Toggle IFC Brep flag command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_ToggleIfcBrepFlag',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_ToggleIfcBrepFlag","Toggle IFC Brep flag"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_ToggleIfcBrepFlag","Force an object to be exported as Brep or not")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
toggleIfcBrepFlag(o)
|
||||
|
||||
|
||||
class _CommandComponent:
|
||||
"the Arch Component command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Component',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Component","Component"),
|
||||
'Accel': "C, M",
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Component","Creates an undefined architectural component")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if sel:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Component"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
for o in sel:
|
||||
FreeCADGui.doCommand("obj = Arch.makeComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandCloneComponent:
|
||||
"the Arch Clone Component command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_Component_Clone',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloneComponent","Clone component"),
|
||||
'Accel': "C, C",
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CloneComponent","Clones an object as an undefined architectural component")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if sel:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Component"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
for o in sel:
|
||||
FreeCADGui.doCommand("obj = Arch.cloneComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
def makeIfcSpreadsheet(archobj=None):
|
||||
ifc_container = None
|
||||
for obj in FreeCAD.ActiveDocument.Objects :
|
||||
@@ -1641,69 +1349,3 @@ def makeIfcSpreadsheet(archobj=None):
|
||||
else :
|
||||
return ifc_spreadsheet
|
||||
|
||||
class _CommandIfcSpreadsheet:
|
||||
"the Arch Schedule command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap': 'Arch_Schedule',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_IfcSpreadsheet","Create IFC spreadsheet..."),
|
||||
'Accel': "I, P",
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_IfcSpreadsheet","Creates a spreadsheet to store IFC properties of an object.")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create IFC properties spreadsheet"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if sel:
|
||||
for o in sel:
|
||||
FreeCADGui.doCommand("Arch.makeIfcSpreadsheet(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
else :
|
||||
FreeCADGui.doCommand("Arch.makeIfcSpreadsheet()")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _ToggleSubs:
|
||||
"the ToggleSubs command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_ToggleSubs',
|
||||
'Accel' : 'Ctrl+Space',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_ToggleSubs","Toggle subcomponents"),
|
||||
'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Arch_ToggleSubs","Shows or hides the subcomponents of this object")}
|
||||
|
||||
def IsActive(self):
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
mode = None
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
if hasattr(obj, "Subtractions"):
|
||||
for sub in obj.Subtractions:
|
||||
if not (Draft.getType(sub) in ["Window","Roof"]):
|
||||
if mode is None:
|
||||
# take the first sub as base
|
||||
mode = sub.ViewObject.isVisible()
|
||||
if mode:
|
||||
sub.ViewObject.hide()
|
||||
else:
|
||||
sub.ViewObject.show()
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Add',_CommandAdd())
|
||||
FreeCADGui.addCommand('Arch_Remove',_CommandRemove())
|
||||
FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh())
|
||||
FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape())
|
||||
FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes())
|
||||
FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape())
|
||||
FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles())
|
||||
FreeCADGui.addCommand('Arch_Check',_CommandCheck())
|
||||
FreeCADGui.addCommand('Arch_Survey',_CommandSurvey())
|
||||
FreeCADGui.addCommand('Arch_ToggleIfcBrepFlag',_ToggleIfcBrepFlag())
|
||||
FreeCADGui.addCommand('Arch_Component',_CommandComponent())
|
||||
FreeCADGui.addCommand('Arch_CloneComponent',_CommandCloneComponent())
|
||||
FreeCADGui.addCommand('Arch_IfcSpreadsheet',_CommandIfcSpreadsheet())
|
||||
FreeCADGui.addCommand('Arch_ToggleSubs',_ToggleSubs())
|
||||
@@ -1994,7 +1994,7 @@ class ComponentTaskPanel:
|
||||
self.psetdefs[row[0]] = row[1:]
|
||||
self.psetkeys = [''.join(map(lambda x: x if x.islower() else " "+x, t[5:]))[1:] for t in self.psetdefs.keys()]
|
||||
self.psetkeys.sort()
|
||||
self.ifcEditor = FreeCADGui.PySideUic.loadUi(":/ui/DialogIfcProperties.ui")
|
||||
self.ifcEditor = FreeCADGui.PySideUic.loadUi(":/ui/dialogIfcPropertiesRedux.ui")
|
||||
|
||||
# center the dialog over FreeCAD window
|
||||
mw = FreeCADGui.getMainWindow()
|
||||
@@ -70,88 +70,6 @@ the facet is triangulated and receives a third mullion
|
||||
"""
|
||||
|
||||
|
||||
def makeCurtainWall(baseobj=None,name=None):
|
||||
|
||||
"""
|
||||
makeCurtainWall([baseobj],[name]): Creates a curtain wall in the active document
|
||||
"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","CurtainWall")
|
||||
obj.Label = name if name else translate("Arch","Curtain Wall")
|
||||
CurtainWall(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderCurtainWall(obj.ViewObject)
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if FreeCAD.GuiUp:
|
||||
baseobj.ViewObject.hide()
|
||||
return obj
|
||||
|
||||
|
||||
class CommandArchCurtainWall:
|
||||
|
||||
|
||||
"the Arch Curtain Wall command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_CurtainWall',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_CurtainWall","Curtain Wall"),
|
||||
'Accel': "C, W",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_CurtainWall","Creates a curtain wall object from selected line or from scratch")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if len(sel) > 1:
|
||||
FreeCAD.Console.PrintError(translate("Arch","Please select only one base object or none")+"\n")
|
||||
elif len(sel) == 1:
|
||||
# build on selection
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Curtain Wall"))
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeCurtainWall(FreeCAD.ActiveDocument."+FreeCADGui.Selection.getSelection()[0].Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
else:
|
||||
# interactive line drawing
|
||||
self.points = []
|
||||
import WorkingPlane
|
||||
WorkingPlane.get_working_plane()
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint)
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
"""Callback for clicks during interactive mode"""
|
||||
|
||||
if point is None:
|
||||
# cancelled
|
||||
return
|
||||
self.points.append(point)
|
||||
if len(self.points) == 1:
|
||||
FreeCADGui.Snapper.getPoint(last=self.points[0],callback=self.getPoint)
|
||||
elif len(self.points) == 2:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Curtain Wall"))
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("base = Draft.makeLine(FreeCAD."+str(self.points[0])+",FreeCAD."+str(self.points[1])+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeCurtainWall(base)")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class CurtainWall(ArchComponent.Component):
|
||||
|
||||
|
||||
@@ -611,7 +529,3 @@ class ViewProviderCurtainWall(ArchComponent.ViewProviderComponent):
|
||||
if self.areDifferentColors(colors,obj.ViewObject.DiffuseColor) or force:
|
||||
obj.ViewObject.DiffuseColor = colors
|
||||
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_CurtainWall',CommandArchCurtainWall())
|
||||
@@ -157,93 +157,3 @@ def cutComponentwithPlane(baseObj, cutterShp=None, side=0):
|
||||
baseParent.addObject(cutObj)
|
||||
cutObj.Base = baseObj
|
||||
cutObj.Tool = obj
|
||||
|
||||
class _CommandCutPlane:
|
||||
"the Arch CutPlane command definition"
|
||||
def GetResources(self):
|
||||
return {"Pixmap": "Arch_CutPlane",
|
||||
"MenuText": QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane", "Cut with plane"),
|
||||
"ToolTip": QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane", "Cut an object with a plane")}
|
||||
|
||||
def IsActive(self):
|
||||
return len(FreeCADGui.Selection.getSelection()) > 1
|
||||
|
||||
def Activated(self):
|
||||
baseObj, baseShp, cutterShp = _getShapes(FreeCADGui.Selection.getSelectionEx("", 0))
|
||||
if baseObj is None:
|
||||
FreeCAD.Console.PrintError(
|
||||
translate("Arch", "Select two objects, an object to be cut and an object defining a cutting plane, in that order\n")
|
||||
)
|
||||
return
|
||||
if baseShp is None:
|
||||
FreeCAD.Console.PrintError(translate("Arch", "The first object does not have a shape\n"))
|
||||
return
|
||||
if cutterShp is None:
|
||||
FreeCAD.Console.PrintError(translate("Arch", "The second object does not define a plane\n"))
|
||||
return
|
||||
panel=_CutPlaneTaskPanel()
|
||||
FreeCADGui.Control.showDialog(panel)
|
||||
|
||||
class _CutPlaneTaskPanel:
|
||||
def __init__(self):
|
||||
_, self.base, self.cutter = _getShapes(FreeCADGui.Selection.getSelectionEx("", 0))
|
||||
|
||||
self.previewObj = FreeCAD.ActiveDocument.addObject("Part::Feature", "PreviewCutVolume")
|
||||
self.previewObj.ViewObject.ShapeColor = (1.00, 0.00, 0.00)
|
||||
self.previewObj.ViewObject.Transparency = 75
|
||||
|
||||
self.form = QtGui.QWidget()
|
||||
self.form.setObjectName("TaskPanel")
|
||||
self.grid = QtGui.QGridLayout(self.form)
|
||||
self.grid.setObjectName("grid")
|
||||
self.title = QtGui.QLabel(self.form)
|
||||
self.grid.addWidget(self.title, 1, 0)
|
||||
self.infoText = QtGui.QLabel(self.form)
|
||||
self.grid.addWidget(self.infoText, 2, 0)
|
||||
self.combobox = QtGui.QComboBox()
|
||||
self.combobox.setCurrentIndex(0)
|
||||
self.grid.addWidget(self.combobox, 2, 1)
|
||||
QtCore.QObject.connect(self.combobox,QtCore.SIGNAL("currentIndexChanged(int)"), self.previewCutVolume)
|
||||
self.retranslateUi(self.form)
|
||||
self.previewCutVolume(self.combobox.currentIndex())
|
||||
|
||||
def isAllowedAlterSelection(self):
|
||||
return False
|
||||
|
||||
def accept(self):
|
||||
FreeCAD.ActiveDocument.removeObject(self.previewObj.Name)
|
||||
side = self.combobox.currentIndex()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch", "Cutting"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("sels = FreeCADGui.Selection.getSelectionEx('', 0)")
|
||||
FreeCADGui.doCommand("Arch.cutComponentwithPlane(sels, side=" + str(side) + ")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return True
|
||||
|
||||
def reject(self):
|
||||
FreeCAD.ActiveDocument.removeObject(self.previewObj.Name)
|
||||
FreeCAD.Console.PrintMessage("Cancel Cut Plane\n")
|
||||
return True
|
||||
|
||||
def getStandardButtons(self):
|
||||
return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel
|
||||
|
||||
def previewCutVolume(self, i):
|
||||
cutVolume = ArchCommands.getCutVolume(self.cutter, self.base)
|
||||
if i == 1:
|
||||
cutVolume = cutVolume[1]
|
||||
else:
|
||||
cutVolume = cutVolume[2]
|
||||
if cutVolume:
|
||||
self.previewObj.Shape = cutVolume
|
||||
|
||||
def retranslateUi(self, TaskPanel):
|
||||
TaskPanel.setWindowTitle(translate("Arch", "Cut Plane"))
|
||||
self.title.setText(translate("Arch", "Cut Plane options"))
|
||||
self.infoText.setText(translate("Arch", "Which side to cut"))
|
||||
self.combobox.addItems([translate("Arch", "Behind"), translate("Arch", "Front")])
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand("Arch_CutPlane", _CommandCutPlane())
|
||||
|
||||
@@ -49,27 +49,7 @@ else:
|
||||
# or hydraulic appliances in a building
|
||||
|
||||
|
||||
def makeEquipment(baseobj=None,placement=None,name=None):
|
||||
|
||||
"makeEquipment([baseobj],[placement],[name]): creates an equipment object from the given base object."
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Equipment")
|
||||
obj.Label = name if name else translate("Arch","Equipment")
|
||||
_Equipment(obj)
|
||||
if baseobj:
|
||||
if baseobj.isDerivedFrom("Mesh::Feature"):
|
||||
obj.Mesh = baseobj
|
||||
else:
|
||||
obj.Base = baseobj
|
||||
if placement:
|
||||
obj.Placement = placement
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderEquipment(obj.ViewObject)
|
||||
if baseobj:
|
||||
baseobj.ViewObject.hide()
|
||||
return obj
|
||||
|
||||
def createMeshView(obj,direction=FreeCAD.Vector(0,0,-1),outeronly=False,largestonly=False):
|
||||
|
||||
@@ -163,110 +143,6 @@ def createMeshView(obj,direction=FreeCAD.Vector(0,0,-1),outeronly=False,largesto
|
||||
return shape
|
||||
|
||||
|
||||
class _CommandEquipment:
|
||||
|
||||
"the Arch Equipment command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Equipment',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Equipment","Equipment"),
|
||||
'Accel': "E, Q",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Equipment","Creates an equipment from a selected object (Part or Mesh)")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if not s:
|
||||
FreeCAD.Console.PrintError(translate("Arch","You must select a base shape object and optionally a mesh object"))
|
||||
else:
|
||||
base = ""
|
||||
mesh = ""
|
||||
if len(s) == 2:
|
||||
if hasattr(s[0],'Shape'):
|
||||
base = s[0].Name
|
||||
elif s[0].isDerivedFrom("Mesh::Feature"):
|
||||
mesh = s[0].Name
|
||||
if hasattr(s[1],'Shape'):
|
||||
if mesh:
|
||||
base = s[1].Name
|
||||
elif s[1].isDerivedFrom("Mesh::Feature"):
|
||||
if base:
|
||||
mesh = s[1].Name
|
||||
else:
|
||||
if hasattr(s[0],'Shape'):
|
||||
base = s[0].Name
|
||||
elif s[0].isDerivedFrom("Mesh::Feature"):
|
||||
mesh = s[0].Name
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Equipment")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
if base:
|
||||
base = "FreeCAD.ActiveDocument." + base
|
||||
FreeCADGui.doCommand("obj = Arch.makeEquipment(" + base + ")")
|
||||
if mesh:
|
||||
FreeCADGui.doCommand("obj.Mesh = FreeCAD.ActiveDocument." + mesh)
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
# get diffuse color info from base object
|
||||
if base and hasattr(s[0].ViewObject,"DiffuseColor"):
|
||||
FreeCADGui.doCommand("FreeCAD.ActiveDocument.Objects[-1].ViewObject.DiffuseColor = " + base + ".ViewObject.DiffuseColor")
|
||||
return
|
||||
|
||||
|
||||
class _Command3Views:
|
||||
|
||||
"the Arch 3Views command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_3Views',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_3Views","3 views from mesh"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_3Views","Creates 3 views (top, front, side) from a mesh-based object")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if len(s) != 1:
|
||||
FreeCAD.Console.PrintError(translate("Arch","You must select exactly one base object"))
|
||||
else:
|
||||
obj = s[0]
|
||||
if not obj.isDerivedFrom("Mesh::Feature"):
|
||||
FreeCAD.Console.PrintError(translate("Arch","The selected object must be a mesh"))
|
||||
else:
|
||||
if obj.Mesh.CountFacets > 1000:
|
||||
msgBox = QtGui.QMessageBox()
|
||||
msgBox.setText(translate("Arch","This mesh has more than 1000 facets."))
|
||||
msgBox.setInformativeText(translate("Arch","This operation can take a long time. Proceed?"))
|
||||
msgBox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
|
||||
msgBox.setDefaultButton(QtGui.QMessageBox.Cancel)
|
||||
ret = msgBox.exec_()
|
||||
if ret == QtGui.QMessageBox.Cancel:
|
||||
return
|
||||
elif obj.Mesh.CountFacets >= 500:
|
||||
FreeCAD.Console.PrintWarning(translate("Arch","The mesh has more than 500 facets. This will take a couple of minutes..."))
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create 3 views")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Part")
|
||||
FreeCADGui.doCommand("s1 = Arch.createMeshView(FreeCAD.ActiveDocument." + obj.Name + ",FreeCAD.Vector(0,0,-1),outeronly=False,largestonly=False)")
|
||||
FreeCADGui.doCommand("Part.show(s1)")
|
||||
FreeCADGui.doCommand("s2 = Arch.createMeshView(FreeCAD.ActiveDocument." + obj.Name + ",FreeCAD.Vector(1,0,0),outeronly=False,largestonly=False)")
|
||||
FreeCADGui.doCommand("Part.show(s2)")
|
||||
FreeCADGui.doCommand("s3 = Arch.createMeshView(FreeCAD.ActiveDocument." + obj.Name + ",FreeCAD.Vector(0,1,0),outeronly=False,largestonly=False)")
|
||||
FreeCADGui.doCommand("Part.show(s3)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
|
||||
class _Equipment(ArchComponent.Component):
|
||||
|
||||
@@ -428,7 +304,3 @@ class _ViewProviderEquipment(ArchComponent.ViewProviderComponent):
|
||||
else:
|
||||
self.coords.point.deleteValues(0)
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Equipment',_CommandEquipment())
|
||||
FreeCADGui.addCommand('Arch_3Views', _Command3Views())
|
||||
@@ -374,61 +374,12 @@ class _ViewProviderFence(ArchComponent.ViewProviderComponent):
|
||||
return colorsToUse[start:end]
|
||||
|
||||
|
||||
class _CommandFence:
|
||||
"the Arch Fence command definition"
|
||||
|
||||
def GetResources(self):
|
||||
return {'Pixmap': 'Arch_Fence',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Fence", "Fence"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Fence", "Creates a fence object from a selected section, post and path")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
|
||||
if len(sel) != 3:
|
||||
QtGui.QMessageBox.information(QtGui.QApplication.activeWindow(
|
||||
), 'Arch Fence selection', 'Select a section, post and path in exactly this order to build a fence.')
|
||||
|
||||
return
|
||||
|
||||
section = sel[0]
|
||||
post = sel[1]
|
||||
path = sel[2]
|
||||
|
||||
makeFence(section, post, path)
|
||||
|
||||
|
||||
def makeFence(section, post, path):
|
||||
obj = FreeCAD.ActiveDocument.addObject(
|
||||
'Part::FeaturePython', 'Fence')
|
||||
|
||||
_Fence(obj)
|
||||
obj.Section = section
|
||||
obj.Post = post
|
||||
obj.Path = path
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderFence(obj.ViewObject)
|
||||
|
||||
hide(section)
|
||||
hide(post)
|
||||
hide(path)
|
||||
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def hide(obj):
|
||||
if hasattr(obj, 'ViewObject') and obj.ViewObject:
|
||||
obj.ViewObject.Visibility = False
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Fence', _CommandFence())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# For testing purposes. When someone runs the File as a macro a default fence will be generated
|
||||
@@ -48,55 +48,6 @@ __author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
|
||||
def makeFrame(baseobj,profile,name=None):
|
||||
|
||||
"""makeFrame(baseobj,profile,[name]): creates a frame object from a base sketch (or any other object
|
||||
containing wires) and a profile object (an extrudable 2D object containing faces or closed wires)"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Frame")
|
||||
obj.Label = name if name else translate("Arch","Frame")
|
||||
_Frame(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderFrame(obj.ViewObject)
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if profile:
|
||||
obj.Profile = profile
|
||||
if FreeCAD.GuiUp:
|
||||
profile.ViewObject.hide()
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandFrame:
|
||||
|
||||
"the Arch Frame command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Frame',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Frame","Frame"),
|
||||
'Accel': "F, R",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Frame","Creates a frame object from a planar 2D object (the extrusion path(s)) and a profile. Make sure objects are selected in that order.")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if len(s) == 2:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Frame"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeFrame(FreeCAD.ActiveDocument."+s[0].Name+",FreeCAD.ActiveDocument."+s[1].Name+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _Frame(ArchComponent.Component):
|
||||
|
||||
@@ -276,6 +227,3 @@ class _ViewProviderFrame(ArchComponent.ViewProviderComponent):
|
||||
p = [self.Object.Profile]
|
||||
return ArchComponent.ViewProviderComponent.claimChildren(self)+p
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Frame',_CommandFrame())
|
||||
@@ -47,44 +47,6 @@ __url__ = "https://www.freecad.org"
|
||||
# This module provides tools to build grid systems
|
||||
|
||||
|
||||
def makeGrid(name=None):
|
||||
|
||||
'''makeGrid([name]): makes a grid object'''
|
||||
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Grid")
|
||||
obj.Label = name if name else translate("Arch","Grid")
|
||||
ArchGrid(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderArchGrid(obj.ViewObject)
|
||||
obj.ViewObject.Transparency = 85
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
|
||||
class CommandArchGrid:
|
||||
|
||||
"the Arch Grid command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Grid',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Grid","Grid"),
|
||||
'Accel': "A, X",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Grid","Creates a customizable grid object")}
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Grid"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
|
||||
FreeCADGui.doCommand("Arch.makeGrid()")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
|
||||
class ArchGrid:
|
||||
|
||||
"The Grid object"
|
||||
@@ -35,14 +35,14 @@ from draftutils import params
|
||||
ifcVersions = ["IFC4", "IFC2X3"]
|
||||
IfcVersion = ifcVersions[params.get_param_arch("IfcVersion")]
|
||||
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets",
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "BIM", "Presets",
|
||||
"ifc_contexts_" + IfcVersion + ".json")) as f:
|
||||
IfcContexts = json.load(f)
|
||||
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets",
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "BIM", "Presets",
|
||||
"ifc_products_" + IfcVersion + ".json")) as f:
|
||||
IfcProducts = json.load(f)
|
||||
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets",
|
||||
with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "BIM", "Presets",
|
||||
"ifc_types_" + IfcVersion + ".json")) as f:
|
||||
IfcTypes = json.load(f)
|
||||
@@ -47,134 +47,6 @@ __url__ = "https://www.freecad.org"
|
||||
# This module provides tools to add materials to
|
||||
# Arch objects
|
||||
|
||||
def makeMaterial(name=None,color=None,transparency=None):
|
||||
|
||||
'''makeMaterial([name],[color],[transparency]): makes an Material object'''
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::MaterialObjectPython","Material")
|
||||
obj.Label = name if name else translate("Arch","Material")
|
||||
_ArchMaterial(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderArchMaterial(obj.ViewObject)
|
||||
getMaterialContainer().addObject(obj)
|
||||
if color:
|
||||
obj.Color = color[:3]
|
||||
if len(color) > 3:
|
||||
obj.Transparency = color[3]*100
|
||||
if transparency:
|
||||
obj.Transparency = transparency
|
||||
return obj
|
||||
|
||||
|
||||
def getMaterialContainer():
|
||||
|
||||
'''getMaterialContainer(): returns a group object to put materials in'''
|
||||
for obj in FreeCAD.ActiveDocument.Objects:
|
||||
if obj.Name == "MaterialContainer":
|
||||
return obj
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroupPython","MaterialContainer")
|
||||
obj.Label = "Materials"
|
||||
_ArchMaterialContainer(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderArchMaterialContainer(obj.ViewObject)
|
||||
return obj
|
||||
|
||||
|
||||
def makeMultiMaterial(name=None):
|
||||
|
||||
'''makeMultiMaterial([name]): makes an MultiMaterial object'''
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","MultiMaterial")
|
||||
obj.Label = name if name else translate("Arch","MultiMaterial")
|
||||
_ArchMultiMaterial(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderArchMultiMaterial(obj.ViewObject)
|
||||
getMaterialContainer().addObject(obj)
|
||||
return obj
|
||||
|
||||
|
||||
def getDocumentMaterials():
|
||||
|
||||
'''getDocumentMaterials(): returns all the arch materials of the document'''
|
||||
for obj in FreeCAD.ActiveDocument.Objects:
|
||||
if obj.Name == "MaterialContainer":
|
||||
mats = []
|
||||
for o in obj.Group:
|
||||
if o.isDerivedFrom("App::MaterialObjectPython"):
|
||||
mats.append(o)
|
||||
return mats
|
||||
return []
|
||||
|
||||
|
||||
class _CommandArchMaterial:
|
||||
|
||||
|
||||
"the Arch Material command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap': 'Arch_Material_Group',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Material","Material"),
|
||||
'Accel': "M, T",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Material","Creates or edits the material definition of a selected object.")}
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create material"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCADGui.doCommand("mat = Arch.makeMaterial()")
|
||||
for obj in sel:
|
||||
if hasattr(obj,"Material"):
|
||||
FreeCADGui.doCommand("FreeCAD.ActiveDocument.getObject(\""+obj.Name+"\").Material = mat")
|
||||
FreeCADGui.doCommandGui("mat.ViewObject.Document.setEdit(mat.ViewObject, 0)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
if FreeCAD.ActiveDocument:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class _CommandArchMultiMaterial:
|
||||
|
||||
|
||||
"the Arch MultiMaterial command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap': 'Arch_Material_Multi',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_MultiMaterial","Multi-Material"),
|
||||
'Accel': "M, T",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_MultiMaterial","Creates or edits multi-materials")}
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create multi-material"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCADGui.doCommand("mat = Arch.makeMultiMaterial()")
|
||||
for obj in sel:
|
||||
if hasattr(obj,"Material"):
|
||||
if not obj.isDerivedFrom("App::MaterialObject"):
|
||||
FreeCADGui.doCommand("FreeCAD.ActiveDocument."+obj.Name+".Material = mat")
|
||||
FreeCADGui.doCommandGui("mat.ViewObject.Document.setEdit(mat.ViewObject, 0)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
if FreeCAD.ActiveDocument:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class _ArchMaterialContainer:
|
||||
|
||||
@@ -1023,19 +895,3 @@ class _ArchMultiMaterialTaskPanel:
|
||||
return True
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Material',_CommandArchMaterial())
|
||||
FreeCADGui.addCommand('Arch_MultiMaterial',_CommandArchMultiMaterial())
|
||||
|
||||
class _ArchMaterialToolsCommand:
|
||||
|
||||
def GetCommands(self):
|
||||
return tuple(['Arch_Material','Arch_MultiMaterial'])
|
||||
def GetResources(self):
|
||||
return { 'MenuText': QT_TRANSLATE_NOOP("Arch_MaterialTools",'Material tools'),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_MaterialTools",'Material tools')
|
||||
}
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
FreeCADGui.addCommand('Arch_MaterialTools', _ArchMaterialToolsCommand())
|
||||
@@ -70,309 +70,6 @@ Presets = [None,
|
||||
|
||||
|
||||
|
||||
def makePanel(baseobj=None,length=0,width=0,thickness=0,placement=None,name=None):
|
||||
|
||||
'''makePanel([baseobj],[length],[width],[thickness],[placement],[name]): creates a
|
||||
panel element based on the given profile object and the given
|
||||
extrusion thickness. If no base object is given, you can also specify
|
||||
length and width for a simple cubic object.'''
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Panel")
|
||||
obj.Label = name if name else translate("Arch","Panel")
|
||||
_Panel(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderPanel(obj.ViewObject)
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.hide()
|
||||
if width:
|
||||
obj.Width = width
|
||||
if thickness:
|
||||
obj.Thickness = thickness
|
||||
if length:
|
||||
obj.Length = length
|
||||
return obj
|
||||
|
||||
|
||||
def makePanelCut(panel,name=None):
|
||||
|
||||
"""makePanelCut(panel,[name]) : Creates a 2D view of the given panel
|
||||
in the 3D space, positioned at the origin."""
|
||||
|
||||
view = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","PanelCut")
|
||||
view.Label = name if name else translate("Arch","View of")+" "+panel.Label
|
||||
PanelCut(view)
|
||||
view.Source = panel
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderPanelCut(view.ViewObject)
|
||||
return view
|
||||
|
||||
|
||||
def makePanelSheet(panels=[],name=None):
|
||||
|
||||
"""makePanelSheet([panels],[name]) : Creates a sheet with the given panel cuts
|
||||
in the 3D space, positioned at the origin."""
|
||||
|
||||
sheet = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","PanelSheet")
|
||||
sheet.Label = name if name else translate("Arch","PanelSheet")
|
||||
PanelSheet(sheet)
|
||||
if panels:
|
||||
sheet.Group = panels
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderPanelSheet(sheet.ViewObject)
|
||||
return sheet
|
||||
|
||||
|
||||
class CommandPanel:
|
||||
|
||||
"the Arch Panel command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Panel',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Panel","Panel"),
|
||||
'Accel': "P, A",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Panel","Creates a panel object from scratch or from a selected object (sketch, wire, face or solid)")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
self.Length = params.get_param_arch("PanelLength")
|
||||
self.Width = params.get_param_arch("PanelWidth")
|
||||
self.Thickness = params.get_param_arch("PanelThickness")
|
||||
self.Profile = None
|
||||
self.continueCmd = False
|
||||
self.rotated = False
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if sel:
|
||||
if len(sel) == 1:
|
||||
if Draft.getType(sel[0]) == "Panel":
|
||||
return
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Panel")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
for obj in sel:
|
||||
FreeCADGui.doCommand("obj = Arch.makePanel(FreeCAD.ActiveDocument." + obj.Name + ",thickness=" + str(self.Thickness) + ")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
# interactive mode
|
||||
import WorkingPlane
|
||||
WorkingPlane.get_working_plane()
|
||||
|
||||
self.points = []
|
||||
self.tracker = DraftTrackers.boxTracker()
|
||||
self.tracker.width(self.Width)
|
||||
self.tracker.height(self.Thickness)
|
||||
self.tracker.length(self.Length)
|
||||
self.tracker.on()
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,movecallback=self.update,extradlg=self.taskbox())
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
"this function is called by the snapper when it has a 3D point"
|
||||
|
||||
self.tracker.finalize()
|
||||
if point is None:
|
||||
return
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Panel"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
if self.Profile:
|
||||
pr = Presets[self.Profile]
|
||||
FreeCADGui.doCommand('p = Arch.makeProfile('+str(pr[2])+','+str(pr[3])+','+str(pr[4])+','+str(pr[5])+')')
|
||||
FreeCADGui.doCommand('s = Arch.makePanel(p,thickness='+str(self.Thickness)+')')
|
||||
#FreeCADGui.doCommand('s.Placement.Rotation = FreeCAD.Rotation(-0.5,0.5,-0.5,0.5)')
|
||||
else:
|
||||
FreeCADGui.doCommand('s = Arch.makePanel(length='+str(self.Length)+',width='+str(self.Width)+',thickness='+str(self.Thickness)+')')
|
||||
FreeCADGui.doCommand('s.Placement.Base = '+DraftVecUtils.toString(point))
|
||||
if self.rotated:
|
||||
FreeCADGui.doCommand('s.Placement.Rotation = FreeCAD.Rotation(FreeCAD.Vector(1.00,0.00,0.00),90.00)')
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
if self.continueCmd:
|
||||
self.Activated()
|
||||
|
||||
def taskbox(self):
|
||||
|
||||
"sets up a taskbox widget"
|
||||
|
||||
w = QtGui.QWidget()
|
||||
ui = FreeCADGui.UiLoader()
|
||||
w.setWindowTitle(translate("Arch","Panel options"))
|
||||
grid = QtGui.QGridLayout(w)
|
||||
|
||||
# presets box
|
||||
labelp = QtGui.QLabel(translate("Arch","Preset"))
|
||||
valuep = QtGui.QComboBox()
|
||||
fpresets = [" "]
|
||||
for p in Presets[1:]:
|
||||
fpresets.append(translate("Arch",p[0]))
|
||||
valuep.addItems(fpresets)
|
||||
grid.addWidget(labelp,0,0,1,1)
|
||||
grid.addWidget(valuep,0,1,1,1)
|
||||
|
||||
# length
|
||||
label1 = QtGui.QLabel(translate("Arch","Length"))
|
||||
self.vLength = ui.createWidget("Gui::InputField")
|
||||
self.vLength.setText(FreeCAD.Units.Quantity(self.Length,FreeCAD.Units.Length).UserString)
|
||||
grid.addWidget(label1,1,0,1,1)
|
||||
grid.addWidget(self.vLength,1,1,1,1)
|
||||
|
||||
# width
|
||||
label2 = QtGui.QLabel(translate("Arch","Width"))
|
||||
self.vWidth = ui.createWidget("Gui::InputField")
|
||||
self.vWidth.setText(FreeCAD.Units.Quantity(self.Width,FreeCAD.Units.Length).UserString)
|
||||
grid.addWidget(label2,2,0,1,1)
|
||||
grid.addWidget(self.vWidth,2,1,1,1)
|
||||
|
||||
# height
|
||||
label3 = QtGui.QLabel(translate("Arch","Thickness"))
|
||||
self.vHeight = ui.createWidget("Gui::InputField")
|
||||
self.vHeight.setText(FreeCAD.Units.Quantity(self.Thickness,FreeCAD.Units.Length).UserString)
|
||||
grid.addWidget(label3,3,0,1,1)
|
||||
grid.addWidget(self.vHeight,3,1,1,1)
|
||||
|
||||
# horizontal button
|
||||
value5 = QtGui.QPushButton(translate("Arch","Rotate"))
|
||||
grid.addWidget(value5,4,0,1,2)
|
||||
|
||||
# continue button
|
||||
label4 = QtGui.QLabel(translate("Arch","Con&tinue"))
|
||||
value4 = QtGui.QCheckBox()
|
||||
value4.setObjectName("ContinueCmd")
|
||||
value4.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label4.setBuddy(value4)
|
||||
self.continueCmd = params.get_param("ContinueMode")
|
||||
value4.setChecked(self.continueCmd)
|
||||
grid.addWidget(label4,5,0,1,1)
|
||||
grid.addWidget(value4,5,1,1,1)
|
||||
|
||||
QtCore.QObject.connect(valuep,QtCore.SIGNAL("currentIndexChanged(int)"),self.setPreset)
|
||||
QtCore.QObject.connect(self.vLength,QtCore.SIGNAL("valueChanged(double)"),self.setLength)
|
||||
QtCore.QObject.connect(self.vWidth,QtCore.SIGNAL("valueChanged(double)"),self.setWidth)
|
||||
QtCore.QObject.connect(self.vHeight,QtCore.SIGNAL("valueChanged(double)"),self.setThickness)
|
||||
QtCore.QObject.connect(value4,QtCore.SIGNAL("stateChanged(int)"),self.setContinue)
|
||||
QtCore.QObject.connect(value5,QtCore.SIGNAL("pressed()"),self.rotate)
|
||||
return w
|
||||
|
||||
def update(self,point,info):
|
||||
|
||||
"this function is called by the Snapper when the mouse is moved"
|
||||
|
||||
if FreeCADGui.Control.activeDialog():
|
||||
self.tracker.pos(point)
|
||||
if self.rotated:
|
||||
self.tracker.width(self.Thickness)
|
||||
self.tracker.height(self.Width)
|
||||
self.tracker.length(self.Length)
|
||||
else:
|
||||
self.tracker.width(self.Width)
|
||||
self.tracker.height(self.Thickness)
|
||||
self.tracker.length(self.Length)
|
||||
|
||||
def setWidth(self,d):
|
||||
|
||||
self.Width = d
|
||||
params.set_param_arch("PanelWidth",d)
|
||||
|
||||
def setThickness(self,d):
|
||||
|
||||
self.Thickness = d
|
||||
params.set_param_arch("PanelThickness",d)
|
||||
|
||||
def setLength(self,d):
|
||||
|
||||
self.Length = d
|
||||
params.set_param_arch("PanelLength",d)
|
||||
|
||||
def setContinue(self,i):
|
||||
|
||||
self.continueCmd = bool(i)
|
||||
params.set_param("ContinueMode", bool(i))
|
||||
|
||||
def setPreset(self,i):
|
||||
|
||||
if i > 0:
|
||||
self.vLength.setText(FreeCAD.Units.Quantity(float(Presets[i][1]),FreeCAD.Units.Length).UserString)
|
||||
self.vWidth.setText(FreeCAD.Units.Quantity(float(Presets[i][2]),FreeCAD.Units.Length).UserString)
|
||||
self.vHeight.setText(FreeCAD.Units.Quantity(float(Presets[i][3]),FreeCAD.Units.Length).UserString)
|
||||
|
||||
def rotate(self):
|
||||
|
||||
self.rotated = not self.rotated
|
||||
|
||||
|
||||
class CommandPanelCut:
|
||||
|
||||
"the Arch Panel Cut command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Panel_Cut',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Panel_Cut","Panel Cut"),
|
||||
'Accel': "P, C",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Panel_Cut","Creates 2D views of selected panels")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Panel Cut")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
if Draft.getType(obj) == "Panel":
|
||||
FreeCADGui.doCommand("Arch.makePanelCut(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class CommandPanelSheet:
|
||||
|
||||
"the Arch Panel Sheet command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Panel_Sheet',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Panel_Sheet","Panel Sheet"),
|
||||
'Accel': "P, S",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Panel_Sheet","Creates a 2D sheet which can contain panel cuts")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Panel Sheet")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
l = "["
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
l += "FreeCAD.ActiveDocument."+obj.Name+","
|
||||
l += "]"
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.doCommand("__objs__ = "+l)
|
||||
FreeCADGui.doCommand("Arch.makePanelSheet(__objs__)")
|
||||
FreeCADGui.doCommand("del __objs__")
|
||||
else:
|
||||
FreeCADGui.doCommand("Arch.makePanelSheet()")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _Panel(ArchComponent.Component):
|
||||
|
||||
"The Panel object"
|
||||
@@ -1394,190 +1091,4 @@ class SheetTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
FreeCADGui.runCommand("Draft_Edit")
|
||||
|
||||
|
||||
class CommandNest:
|
||||
|
||||
|
||||
"the Arch Panel command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Nest',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Nest","Nest"),
|
||||
'Accel': "N, E",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Nest","Nests a series of selected shapes in a container")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCADGui.Control.showDialog(NestTaskPanel())
|
||||
|
||||
|
||||
class NestTaskPanel:
|
||||
|
||||
|
||||
'''The TaskPanel for Arch Nest command'''
|
||||
|
||||
def __init__(self,obj=None):
|
||||
|
||||
import ArchNesting
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/ui/ArchNest.ui")
|
||||
self.form.progressBar.hide()
|
||||
self.form.ButtonPreview.setEnabled(False)
|
||||
self.form.ButtonStop.setEnabled(False)
|
||||
QtCore.QObject.connect(self.form.ButtonContainer,QtCore.SIGNAL("pressed()"),self.getContainer)
|
||||
QtCore.QObject.connect(self.form.ButtonShapes,QtCore.SIGNAL("pressed()"),self.getShapes)
|
||||
QtCore.QObject.connect(self.form.ButtonRemove,QtCore.SIGNAL("pressed()"),self.removeShapes)
|
||||
QtCore.QObject.connect(self.form.ButtonStart,QtCore.SIGNAL("pressed()"),self.start)
|
||||
QtCore.QObject.connect(self.form.ButtonStop,QtCore.SIGNAL("pressed()"),self.stop)
|
||||
QtCore.QObject.connect(self.form.ButtonPreview,QtCore.SIGNAL("pressed()"),self.preview)
|
||||
self.shapes = []
|
||||
self.container = None
|
||||
self.nester = None
|
||||
self.temps = []
|
||||
|
||||
def reject(self):
|
||||
|
||||
self.stop()
|
||||
self.clearTemps()
|
||||
return True
|
||||
|
||||
def accept(self):
|
||||
|
||||
self.stop()
|
||||
self.clearTemps()
|
||||
if self.nester:
|
||||
FreeCAD.ActiveDocument.openTransaction("Nesting")
|
||||
self.nester.apply()
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
return True
|
||||
|
||||
def clearTemps(self):
|
||||
|
||||
for t in self.temps:
|
||||
if FreeCAD.ActiveDocument.getObject(t.Name):
|
||||
FreeCAD.ActiveDocument.removeObject(t.Name)
|
||||
self.temps = []
|
||||
|
||||
def getContainer(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if len(s) == 1:
|
||||
if hasattr(s[0],'Shape'):
|
||||
if len(s[0].Shape.Faces) == 1:
|
||||
if not (s[0] in self.shapes):
|
||||
self.form.Container.clear()
|
||||
self.addObject(s[0],self.form.Container)
|
||||
self.container = s[0]
|
||||
else:
|
||||
FreeCAD.Console.PrintError(translate("Arch","This object has no face"))
|
||||
if Draft.getType(s[0]) == "PanelSheet":
|
||||
if hasattr(s[0],"Rotations"):
|
||||
if s[0].Rotations:
|
||||
self.form.Rotations.setText(str(s[0].Rotations))
|
||||
|
||||
def getShapes(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
for o in s:
|
||||
if hasattr(o,'Shape'):
|
||||
if not o in self.shapes:
|
||||
if o != self.container:
|
||||
self.addObject(o,self.form.Shapes)
|
||||
self.shapes.append(o)
|
||||
|
||||
def addObject(self,obj,form):
|
||||
|
||||
i = QtGui.QListWidgetItem()
|
||||
i.setText(obj.Label)
|
||||
i.setToolTip(obj.Name)
|
||||
if hasattr(obj.ViewObject,"Proxy"):
|
||||
if hasattr(obj.ViewObject.Proxy,"getIcon"):
|
||||
i.setIcon(QtGui.QIcon(obj.ViewObject.Proxy.getIcon()))
|
||||
elif hasattr(obj.ViewObject, "Icon"):
|
||||
i.setIcon(QtGui.QIcon(obj.ViewObject.Icon))
|
||||
else:
|
||||
i.setIcon(QtGui.QIcon(":/icons/Part_3D_object.svg"))
|
||||
form.addItem(i)
|
||||
|
||||
def removeShapes(self):
|
||||
|
||||
for i in self.form.Shapes.selectedItems():
|
||||
o = FreeCAD.ActiveDocument.getObject(i.toolTip())
|
||||
if o:
|
||||
if o in self.shapes:
|
||||
self.shapes.remove(o)
|
||||
self.form.Shapes.takeItem(self.form.Shapes.row(i))
|
||||
|
||||
def setCounter(self,value):
|
||||
|
||||
self.form.progressBar.setValue(value)
|
||||
|
||||
def start(self):
|
||||
|
||||
self.clearTemps()
|
||||
self.form.progressBar.setFormat("pass 1: %p%")
|
||||
self.form.progressBar.setValue(0)
|
||||
self.form.progressBar.show()
|
||||
tolerance = self.form.Tolerance.value()
|
||||
discretize = self.form.Subdivisions.value()
|
||||
rotations = [float(x) for x in self.form.Rotations.text().split(",")]
|
||||
import ArchNesting
|
||||
ArchNesting.TOLERANCE = tolerance
|
||||
ArchNesting.DISCRETIZE = discretize
|
||||
ArchNesting.ROTATIONS = rotations
|
||||
self.nester = ArchNesting.Nester()
|
||||
self.nester.addContainer(self.container)
|
||||
self.nester.addObjects(self.shapes)
|
||||
self.nester.setCounter = self.setCounter
|
||||
self.form.ButtonStop.setEnabled(True)
|
||||
self.form.ButtonStart.setEnabled(False)
|
||||
self.form.ButtonPreview.setEnabled(False)
|
||||
QtGui.QApplication.processEvents()
|
||||
result = self.nester.run()
|
||||
self.form.progressBar.hide()
|
||||
self.form.ButtonStart.setEnabled(True)
|
||||
self.form.ButtonStop.setEnabled(False)
|
||||
if result:
|
||||
self.form.ButtonPreview.setEnabled(True)
|
||||
|
||||
def stop(self):
|
||||
|
||||
if self.nester:
|
||||
self.nester.stop()
|
||||
self.form.ButtonStart.setEnabled(True)
|
||||
self.form.ButtonStop.setEnabled(False)
|
||||
self.form.ButtonPreview.setEnabled(False)
|
||||
self.form.progressBar.hide()
|
||||
|
||||
def preview(self):
|
||||
|
||||
self.clearTemps()
|
||||
if self.nester:
|
||||
t = self.nester.show()
|
||||
if t:
|
||||
self.temps.extend(t)
|
||||
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
|
||||
class CommandPanelGroup:
|
||||
|
||||
def GetCommands(self):
|
||||
return tuple(['Arch_Panel','Arch_Panel_Cut','Arch_Panel_Sheet','Arch_Nest'])
|
||||
def GetResources(self):
|
||||
return { 'MenuText': QT_TRANSLATE_NOOP("Arch_PanelTools",'Panel tools'),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_PanelTools",'Panel tools')
|
||||
}
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
FreeCADGui.addCommand('Arch_Panel',CommandPanel())
|
||||
FreeCADGui.addCommand('Arch_Panel_Cut',CommandPanelCut())
|
||||
FreeCADGui.addCommand('Arch_Panel_Sheet',CommandPanelSheet())
|
||||
FreeCADGui.addCommand('Arch_Nest',CommandNest())
|
||||
FreeCADGui.addCommand('Arch_PanelTools', CommandPanelGroup())
|
||||
@@ -49,132 +49,6 @@ __author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
|
||||
def makePipe(baseobj=None,diameter=0,length=0,placement=None,name=None):
|
||||
|
||||
"makePipe([baseobj],[diameter],[length],[placement],[name]): creates an pipe object from the given base object"
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj= FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Pipe")
|
||||
obj.Label = name if name else translate("Arch","Pipe")
|
||||
_ArchPipe(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderPipe(obj.ViewObject)
|
||||
if baseobj:
|
||||
baseobj.ViewObject.hide()
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
else:
|
||||
if length:
|
||||
obj.Length = length
|
||||
else:
|
||||
obj.Length = 1000
|
||||
if diameter:
|
||||
obj.Diameter = diameter
|
||||
else:
|
||||
obj.Diameter = params.get_param_arch("PipeDiameter")
|
||||
if placement:
|
||||
obj.Placement = placement
|
||||
return obj
|
||||
|
||||
|
||||
def makePipeConnector(pipes,radius=0,name=None):
|
||||
|
||||
"makePipeConnector(pipes,[radius],[name]): creates a connector between the given pipes"
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj= FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Connector")
|
||||
obj.Label = name if name else translate("Arch","Connector")
|
||||
_ArchPipeConnector(obj)
|
||||
obj.Pipes = pipes
|
||||
if not radius:
|
||||
radius = pipes[0].Diameter
|
||||
obj.Radius = radius
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderPipe(obj.ViewObject)
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandPipe:
|
||||
|
||||
|
||||
"the Arch Pipe command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Pipe',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Pipe","Pipe"),
|
||||
'Accel': "P, I",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Pipe","Creates a pipe object from a given Wire or Line")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if s:
|
||||
for obj in s:
|
||||
if hasattr(obj,'Shape'):
|
||||
if len(obj.Shape.Wires) == 1:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Pipe"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipe(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
else:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Pipe"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipe()")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _CommandPipeConnector:
|
||||
|
||||
|
||||
"the Arch Pipe command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_PipeConnector',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_PipeConnector","Connector"),
|
||||
'Accel': "P, C",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_PipeConnector","Creates a connector between 2 or 3 selected pipes")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
import Draft
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if not (len(s) in [2,3]):
|
||||
FreeCAD.Console.PrintError(translate("Arch","Please select exactly 2 or 3 Pipe objects")+"\n")
|
||||
return
|
||||
o = "["
|
||||
for obj in s:
|
||||
if Draft.getType(obj) != "Pipe":
|
||||
FreeCAD.Console.PrintError(translate("Arch","Please select only Pipe objects")+"\n")
|
||||
return
|
||||
o += "FreeCAD.ActiveDocument."+obj.Name+","
|
||||
o += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Connector"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipeConnector("+o+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _ArchPipe(ArchComponent.Component):
|
||||
|
||||
@@ -509,19 +383,3 @@ class _ArchPipeConnector(ArchComponent.Component):
|
||||
pipe.Proxy.execute(pipe)
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Pipe',_CommandPipe())
|
||||
FreeCADGui.addCommand('Arch_PipeConnector',_CommandPipeConnector())
|
||||
|
||||
class _ArchPipeGroupCommand:
|
||||
|
||||
def GetCommands(self):
|
||||
return tuple(['Arch_Pipe','Arch_PipeConnector'])
|
||||
def GetResources(self):
|
||||
return { 'MenuText': QT_TRANSLATE_NOOP("Arch_PipeTools",'Pipe tools'),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_PipeTools",'Pipe tools')
|
||||
}
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
FreeCADGui.addCommand('Arch_PipeTools', _ArchPipeGroupCommand())
|
||||
@@ -777,14 +777,14 @@ class _PrecastTaskPanel:
|
||||
def __init__(self):
|
||||
|
||||
import FreeCADGui
|
||||
from PySide import QtCore,QtGui,QtSvgWidgets
|
||||
from PySide import QtCore,QtGui,QtSvg
|
||||
self.form = QtGui.QWidget()
|
||||
self.grid = QtGui.QGridLayout(self.form)
|
||||
self.PrecastTypes = ["Beam","I-Beam","Pillar","Panel","Slab","Stairs"]
|
||||
self.SlabTypes = ["Champagne","Hat"]
|
||||
|
||||
# image display
|
||||
self.preview = QtSvgWidgets.QSvgWidget(":/ui/ParametersBeam.svg")
|
||||
self.preview = QtSvg.QSvgWidget(":/ui/ParametersBeam.svg")
|
||||
self.preview.setMaximumWidth(200)
|
||||
self.preview.setMinimumHeight(120)
|
||||
self.grid.addWidget(self.preview,0,0,1,2)
|
||||
@@ -1263,7 +1263,7 @@ class _DentsTaskPanel:
|
||||
def __init__(self):
|
||||
|
||||
import FreeCADGui
|
||||
from PySide import QtCore,QtGui,QtSvgWidgets
|
||||
from PySide import QtCore,QtGui,QtSvg
|
||||
self.form = QtGui.QWidget()
|
||||
self.grid = QtGui.QGridLayout(self.form)
|
||||
self.Rotations = ["N","S","E","O"]
|
||||
@@ -1282,7 +1282,7 @@ class _DentsTaskPanel:
|
||||
self.grid.addWidget(self.buttonRemove,2,1,1,1)
|
||||
|
||||
# image display
|
||||
self.preview = QtSvgWidgets.QSvgWidget(":/ui/ParametersDent.svg")
|
||||
self.preview = QtSvg.QSvgWidget(":/ui/ParametersDent.svg")
|
||||
self.preview.setMaximumWidth(200)
|
||||
self.preview.setMinimumHeight(120)
|
||||
self.grid.addWidget(self.preview,3,0,1,2)
|
||||
@@ -55,9 +55,9 @@ else:
|
||||
# Presets in the form: Class, Name, Profile type, [profile data]
|
||||
# Search for profiles.csv in data/Mod/Arch/Presets and in the same folder as this file
|
||||
# and in the user path
|
||||
profilefiles = [os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","profiles.csv"),
|
||||
profilefiles = [os.path.join(FreeCAD.getResourceDir(),"Mod","BIM","Presets","profiles.csv"),
|
||||
os.path.join(os.path.dirname(__file__),"Presets","profiles.csv"),
|
||||
os.path.join(FreeCAD.getUserAppDataDir(),"Arch","profiles.csv")]
|
||||
os.path.join(FreeCAD.getUserAppDataDir(),"BIM","profiles.csv")]
|
||||
|
||||
|
||||
def readPresets():
|
||||
@@ -85,150 +85,6 @@ def readPresets():
|
||||
print("Could not open ",profilefile)
|
||||
return Presets
|
||||
|
||||
def makeProfile(profile=[0,'REC','REC100x100','R',100,100]):
|
||||
|
||||
'''makeProfile(profile): returns a shape with the face defined by the profile data'''
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::Part2DObjectPython",profile[2])
|
||||
obj.Label = profile[2]
|
||||
if profile[3]=="C":
|
||||
_ProfileC(obj, profile)
|
||||
elif profile[3]=="H":
|
||||
_ProfileH(obj, profile)
|
||||
elif profile[3]=="R":
|
||||
_ProfileR(obj, profile)
|
||||
elif profile[3]=="RH":
|
||||
_ProfileRH(obj, profile)
|
||||
elif profile[3]=="U":
|
||||
_ProfileU(obj, profile)
|
||||
elif profile[3]=="L":
|
||||
_ProfileL(obj, profile)
|
||||
elif profile[3]=="T":
|
||||
_ProfileT(obj, profile)
|
||||
else :
|
||||
print("Profile not supported")
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderProfile(obj.ViewObject)
|
||||
return obj
|
||||
|
||||
|
||||
class Arch_Profile:
|
||||
|
||||
"""The FreeCAD Arch_Profile command definition"""
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Profile',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Profile","Profile"),
|
||||
'Accel': "P, F",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Profile","Creates a profile")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
self.Profile = None
|
||||
self.Categories = []
|
||||
self.Presets = readPresets()
|
||||
for pre in self.Presets:
|
||||
if pre[1] not in self.Categories:
|
||||
self.Categories.append(pre[1])
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,extradlg=[self.taskbox()],title=translate("Arch","Create profile"))
|
||||
|
||||
def taskbox(self):
|
||||
|
||||
"sets up a taskbox widget"
|
||||
|
||||
w = QtGui.QWidget()
|
||||
ui = FreeCADGui.UiLoader()
|
||||
w.setWindowTitle(translate("Arch","Profile settings"))
|
||||
grid = QtGui.QGridLayout(w)
|
||||
|
||||
# categories box
|
||||
labelc = QtGui.QLabel(translate("Arch","Category"))
|
||||
self.vCategory = QtGui.QComboBox()
|
||||
self.vCategory.addItems([" "] + self.Categories)
|
||||
grid.addWidget(labelc,1,0,1,1)
|
||||
grid.addWidget(self.vCategory,1,1,1,1)
|
||||
|
||||
# presets box
|
||||
labelp = QtGui.QLabel(translate("Arch","Preset"))
|
||||
self.vPresets = QtGui.QComboBox()
|
||||
self.pSelect = [None]
|
||||
fpresets = [" "]
|
||||
self.vPresets.addItems(fpresets)
|
||||
grid.addWidget(labelp,2,0,1,1)
|
||||
grid.addWidget(self.vPresets,2,1,1,1)
|
||||
|
||||
# connect slots
|
||||
self.vCategory.currentIndexChanged.connect(self.setCategory)
|
||||
self.vPresets.currentIndexChanged.connect(self.setPreset)
|
||||
|
||||
# restore preset
|
||||
stored = params.get_param_arch("StructurePreset")
|
||||
if stored:
|
||||
if ";" in stored:
|
||||
stored = stored.split(";")
|
||||
if len(stored) >= 3:
|
||||
if stored[1] in self.Categories:
|
||||
self.vCategory.setCurrentIndex(1+self.Categories.index(stored[1]))
|
||||
self.setCategory(1+self.Categories.index(stored[1]))
|
||||
ps = [p[2] for p in self.pSelect]
|
||||
if stored[2] in ps:
|
||||
self.vPresets.setCurrentIndex(ps.index(stored[2]))
|
||||
return w
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
"this function is called by the snapper when it has a 3D point"
|
||||
|
||||
if not point:
|
||||
return
|
||||
if not self.Profile:
|
||||
return
|
||||
pt = "FreeCAD.Vector("+str(point.x)+","+str(point.y)+","+str(point.z)+")"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Profile"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand('p = Arch.makeProfile('+str(self.Profile)+')')
|
||||
FreeCADGui.doCommand('p.Placement.move('+pt+')')
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(p)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setCategory(self,i):
|
||||
|
||||
self.vPresets.clear()
|
||||
if i == 0:
|
||||
self.pSelect = [None]
|
||||
self.vPresets.addItems([" "])
|
||||
params.set_param_arch("StructurePreset","")
|
||||
else:
|
||||
self.pSelect = [p for p in self.Presets if p[1] == self.Categories[i-1]]
|
||||
fpresets = []
|
||||
for p in self.pSelect:
|
||||
f = FreeCAD.Units.Quantity(p[4],FreeCAD.Units.Length).getUserPreferred()
|
||||
d = params.get_param("Decimals",path="Units")
|
||||
s1 = str(round(p[4]/f[1],d))
|
||||
s2 = str(round(p[5]/f[1],d))
|
||||
s3 = str(f[2])
|
||||
fpresets.append(p[2]+" ("+s1+"x"+s2+s3+")")
|
||||
self.vPresets.addItems(fpresets)
|
||||
self.setPreset(0)
|
||||
|
||||
def setPreset(self,i):
|
||||
|
||||
self.Profile = None
|
||||
elt = self.pSelect[i]
|
||||
if elt:
|
||||
p=elt[0]-1 # Presets indexes are 1-based
|
||||
self.Profile = self.Presets[p]
|
||||
params.set_param_arch("StructurePreset",";".join([str(i) for i in self.Profile]))
|
||||
|
||||
|
||||
class _Profile(Draft._DraftObject):
|
||||
@@ -611,6 +467,3 @@ class ProfileTaskPanel:
|
||||
self.form.setWindowTitle(self.type+" "+QtGui.QApplication.translate("Arch", "Profile", None))
|
||||
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Profile',Arch_Profile())
|
||||
@@ -48,89 +48,6 @@ __title__ = "FreeCAD Project"
|
||||
__author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
def makeProject(sites=None, name=None):
|
||||
"""Create an Arch project.
|
||||
|
||||
If sites are provided, add them as children of the new project.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
sites: list of <Part::FeaturePython>, optional
|
||||
Sites to add as children of the project. Ultimately this could be
|
||||
anything, however.
|
||||
name: str, optional
|
||||
The label for the project.
|
||||
|
||||
Returns
|
||||
-------
|
||||
<Part::FeaturePython>
|
||||
The created project.
|
||||
"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
return FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
|
||||
import Part
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "Project")
|
||||
obj.Label = name if name else translate("Arch", "Project")
|
||||
_Project(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderProject(obj.ViewObject)
|
||||
if sites:
|
||||
obj.Group = sites
|
||||
return obj
|
||||
|
||||
class _CommandProject:
|
||||
"""The command definition for the Arch workbench's gui tool, Arch Project.
|
||||
|
||||
A tool for creating Arch projects.
|
||||
|
||||
Creates a project from the objects selected by the user that have the Site
|
||||
IfcType, if any.
|
||||
|
||||
Find documentation on the end user usage of Arch Project here:
|
||||
https://wiki.freecad.org/Arch_Project
|
||||
"""
|
||||
|
||||
def GetResources(self):
|
||||
"""Return a dictionary with the visual aspects of the Arch Project tool."""
|
||||
return {'Pixmap' : 'Arch_Project',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Project", "Project"),
|
||||
'Accel': "P, O",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Project", "Creates a project entity aggregating the selected sites.")}
|
||||
|
||||
def IsActive(self):
|
||||
"""Determine whether or not the Arch Project tool is active.
|
||||
|
||||
Inactive commands are indicated by a greyed-out icon in the menus and toolbars.
|
||||
"""
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
"""Executed when Arch Project is called.
|
||||
|
||||
Create a project from the objects selected by the user that have the
|
||||
Site IfcType, if any.
|
||||
"""
|
||||
|
||||
selection = FreeCADGui.Selection.getSelection()
|
||||
siteobj = []
|
||||
|
||||
for obj in selection:
|
||||
if hasattr(obj, "IfcType") and obj.IfcType == "Site":
|
||||
siteobj.append(obj)
|
||||
|
||||
ss = "[ "
|
||||
for o in siteobj:
|
||||
ss += "FreeCAD.ActiveDocument." + o.Name + ", "
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Project"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeProject("+ss+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
class _Project(ArchIFC.IfcContext):
|
||||
"""The project object.
|
||||
@@ -219,6 +136,3 @@ class _ViewProviderProject(ArchIFCView.IfcContextView):
|
||||
|
||||
def onChanged(self,vobj,prop):
|
||||
self.removeDisplaymodeChildNodes(vobj)
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Project', _CommandProject())
|
||||
@@ -39,6 +39,10 @@ else:
|
||||
return txt
|
||||
# \endcond
|
||||
|
||||
# for Rebar addon compatibility
|
||||
from bimcommands import BimRebar
|
||||
_CommandRebar = BimRebar.Arch_Rebar
|
||||
|
||||
## @package ArchRebar
|
||||
# \ingroup ARCH
|
||||
# \brief The Rebar object and tools
|
||||
@@ -52,117 +56,6 @@ __author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
|
||||
def makeRebar(baseobj=None,sketch=None,diameter=None,amount=1,offset=None,name=None):
|
||||
|
||||
"""makeRebar([baseobj],[sketch],[diameter],[amount],[offset],[name]): adds a Reinforcement Bar object
|
||||
to the given structural object, using the given sketch as profile."""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Rebar")
|
||||
obj.Label = name if name else translate("Arch","Rebar")
|
||||
_Rebar(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderRebar(obj.ViewObject)
|
||||
if baseobj and sketch:
|
||||
if hasattr(sketch,"AttachmentSupport"):
|
||||
if sketch.AttachmentSupport:
|
||||
if isinstance(sketch.AttachmentSupport,tuple):
|
||||
if sketch.AttachmentSupport[0] == baseobj:
|
||||
sketch.AttachmentSupport = None
|
||||
elif sketch.AttachmentSupport == baseobj:
|
||||
sketch.AttachmentSupport = None
|
||||
obj.Base = sketch
|
||||
if FreeCAD.GuiUp:
|
||||
sketch.ViewObject.hide()
|
||||
obj.Host = baseobj
|
||||
elif sketch and not baseobj:
|
||||
# a rebar could be based on a wire without the existence of a Structure
|
||||
obj.Base = sketch
|
||||
if FreeCAD.GuiUp:
|
||||
sketch.ViewObject.hide()
|
||||
obj.Host = None
|
||||
elif baseobj and not sketch:
|
||||
obj.Shape = baseobj.Shape
|
||||
if diameter:
|
||||
obj.Diameter = diameter
|
||||
else:
|
||||
obj.Diameter = params.get_param_arch("RebarDiameter")
|
||||
obj.Amount = amount
|
||||
obj.Document.recompute()
|
||||
if offset is not None:
|
||||
obj.OffsetStart = offset
|
||||
obj.OffsetEnd = offset
|
||||
else:
|
||||
obj.OffsetStart = params.get_param_arch("RebarOffset")
|
||||
obj.OffsetEnd = params.get_param_arch("RebarOffset")
|
||||
obj.Mark = obj.Label
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandRebar:
|
||||
|
||||
"the Arch Rebar command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Rebar',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Rebar","Custom Rebar"),
|
||||
'Accel': "R, B",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Rebar","Creates a Reinforcement bar from the selected face of solid object and/or a sketch")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelectionEx()
|
||||
if sel:
|
||||
obj = sel[0].Object
|
||||
if hasattr(obj,"Shape") and obj.Shape.Solids:
|
||||
# this is our host object
|
||||
if len(sel) > 1:
|
||||
sk = sel[1].Object
|
||||
if hasattr(sk,'Shape'):
|
||||
if len(sk.Shape.Wires) == 1:
|
||||
# we have a structure and a wire: create the rebar now
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Rebar"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeRebar(FreeCAD.ActiveDocument."+obj.Name+",FreeCAD.ActiveDocument."+sk.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
else:
|
||||
# we have only a structure: open the sketcher
|
||||
FreeCADGui.activateWorkbench("SketcherWorkbench")
|
||||
FreeCADGui.runCommand("Sketcher_NewSketch")
|
||||
FreeCAD.ArchObserver = ArchComponent.ArchSelectionObserver(obj,FreeCAD.ActiveDocument.Objects[-1],hide=False,nextCommand="Arch_Rebar")
|
||||
FreeCADGui.Selection.addObserver(FreeCAD.ArchObserver)
|
||||
return
|
||||
elif hasattr(obj,'Shape'):
|
||||
if len(obj.Shape.Wires) == 1:
|
||||
# we have only a wire: extract its support object, if available, and make the rebar
|
||||
support = "None"
|
||||
if hasattr(obj,"AttachmentSupport"):
|
||||
if obj.AttachmentSupport:
|
||||
if len(obj.AttachmentSupport) != 0:
|
||||
support = "FreeCAD.ActiveDocument."+obj.AttachmentSupport[0][0].Name
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Rebar"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeRebar("+support+",FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
FreeCAD.Console.PrintMessage(translate("Arch","Please select a base face on a structural object")+"\n")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCADGui.Control.showDialog(ArchComponent.SelectionTaskPanel())
|
||||
FreeCAD.ArchObserver = ArchComponent.ArchSelectionObserver(nextCommand="Arch_Rebar")
|
||||
FreeCADGui.Selection.addObserver(FreeCAD.ArchObserver)
|
||||
|
||||
|
||||
class _Rebar(ArchComponent.Component):
|
||||
|
||||
"A parametric reinforcement bar (rebar) object"
|
||||
@@ -676,5 +569,3 @@ def getLengthOfRebar(rebar):
|
||||
FreeCAD.Console.PrintError("Cannot calculate rebar length from its base object\n")
|
||||
return None
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Rebar',_CommandRebar())
|
||||
@@ -52,29 +52,6 @@ else:
|
||||
# another file.
|
||||
|
||||
|
||||
|
||||
def makeReference(filepath=None, partname=None, name=None):
|
||||
|
||||
"""makeReference([filepath],[partname],[name]): Creates an Arch Reference object"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","ArchReference")
|
||||
obj.Label = name if name else translate("Arch","External Reference")
|
||||
ArchReference(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderArchReference(obj.ViewObject)
|
||||
if filepath:
|
||||
obj.File = filepath
|
||||
if partname:
|
||||
obj.Part = partname
|
||||
import Draft
|
||||
Draft.select(obj)
|
||||
return obj
|
||||
|
||||
|
||||
|
||||
class ArchReference:
|
||||
|
||||
"""The Arch Reference object"""
|
||||
@@ -197,8 +174,8 @@ class ArchReference:
|
||||
if not ifcfile:
|
||||
return
|
||||
try:
|
||||
import ifc_tools
|
||||
import ifc_generator
|
||||
from nativeifc import ifc_tools
|
||||
from nativeifc import ifc_generator
|
||||
except:
|
||||
t = translate("Arch","NativeIFC not available - unable to process IFC files")
|
||||
FreeCAD.Console.PrintError(t+"\n")
|
||||
@@ -244,7 +221,7 @@ class ArchReference:
|
||||
"""returns IFC elements for this object"""
|
||||
|
||||
try:
|
||||
import ifc_generator
|
||||
from nativeifc import ifc_generator
|
||||
except:
|
||||
t = translate("Arch","NativeIFC not available - unable to process IFC files")
|
||||
FreeCAD.Console.PrintError(t+"\n")
|
||||
@@ -852,8 +829,8 @@ class ViewProviderArchReference:
|
||||
"""Sets the coin node of this object from an IFC file"""
|
||||
|
||||
try:
|
||||
import ifc_tools
|
||||
import ifc_generator
|
||||
from nativeifc import ifc_tools
|
||||
from nativeifc import ifc_generator
|
||||
except:
|
||||
t = translate("Arch","NativeIFC not available - unable to process IFC files")
|
||||
FreeCAD.Console.PrintError(t+"\n")
|
||||
@@ -957,7 +934,7 @@ class ArchReferenceTaskPanel:
|
||||
filters = "*.FCStd *.dxf"
|
||||
# enable IFC support if NativeIFC is present
|
||||
try:
|
||||
import ifc_tools
|
||||
from nativeifc import ifc_tools
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
@@ -995,34 +972,4 @@ class ArchReferenceTaskPanel:
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
|
||||
|
||||
class ArchReferenceCommand:
|
||||
|
||||
|
||||
"the Arch Reference command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Reference',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Reference","External reference"),
|
||||
'Accel': "E, X",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Reference","Creates an external reference object")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create external reference"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("obj = Arch.makeReference()")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCADGui.doCommand("obj.ViewObject.Document.setEdit(obj.ViewObject, 0)")
|
||||
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Reference', ArchReferenceCommand())
|
||||
@@ -144,107 +144,6 @@ def face_from_points(ptLst):
|
||||
return Part.Face(wire)
|
||||
|
||||
|
||||
def makeRoof(baseobj=None,
|
||||
facenr=0,
|
||||
angles=[45.0], run=[250.0], idrel=[-1], thickness=[50.0], overhang=[100.0],
|
||||
name=None):
|
||||
'''makeRoof(baseobj, [facenr], [angle], [name]): Makes a roof based on
|
||||
a closed wire or an object.
|
||||
|
||||
You can provide a list of angles, run, idrel, thickness, overhang for
|
||||
each edge in the wire to define the roof shape. The default for angle is
|
||||
45 and the list is automatically completed to match the number of edges
|
||||
in the wire.
|
||||
|
||||
If the base object is a solid the roof uses its shape.
|
||||
'''
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "Roof")
|
||||
obj.Label = name if name else translate("Arch", "Roof")
|
||||
baseWire = None
|
||||
_Roof(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderRoof(obj.ViewObject)
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if hasattr(obj.Base, "Shape"):
|
||||
if obj.Base.Shape.Solids:
|
||||
if FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.hide()
|
||||
else:
|
||||
if (obj.Base.Shape.Faces and obj.Face):
|
||||
baseWire = obj.Base.Shape.Faces[obj.Face-1].Wires[0]
|
||||
if FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.hide()
|
||||
elif obj.Base.Shape.Wires:
|
||||
baseWire = obj.Base.Shape.Wires[0]
|
||||
if FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.hide()
|
||||
if baseWire:
|
||||
if baseWire.isClosed():
|
||||
if FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.hide()
|
||||
edges = Part.__sortEdges__(baseWire.Edges)
|
||||
ln = len(edges)
|
||||
|
||||
obj.Angles = adjust_list_len(angles, ln, angles[0])
|
||||
obj.Runs = adjust_list_len(run, ln, run[0])
|
||||
obj.IdRel = adjust_list_len(idrel, ln, idrel[0])
|
||||
obj.Thickness = adjust_list_len(thickness, ln, thickness[0])
|
||||
obj.Overhang = adjust_list_len(overhang, ln, overhang[0])
|
||||
|
||||
obj.Face = facenr
|
||||
return obj
|
||||
|
||||
|
||||
class _CommandRoof:
|
||||
'''the Arch Roof command definition'''
|
||||
def GetResources(self):
|
||||
return {"Pixmap" : "Arch_Roof",
|
||||
"MenuText": QT_TRANSLATE_NOOP("Arch_Roof", "Roof"),
|
||||
"Accel" : "R, F",
|
||||
"ToolTip" : QT_TRANSLATE_NOOP("Arch_Roof", "Creates a roof object from the selected wire.")}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
sel = FreeCADGui.Selection.getSelectionEx()
|
||||
if sel:
|
||||
sel = sel[0]
|
||||
obj = sel.Object
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if sel.HasSubObjects:
|
||||
if "Face" in sel.SubElementNames[0]:
|
||||
i = int(sel.SubElementNames[0][4:])
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch", "Create Roof"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeRoof(FreeCAD.ActiveDocument." + obj.Name + "," + str(i) + ")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
if hasattr(obj, "Shape"):
|
||||
if obj.Shape.Wires:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch", "Create Roof"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeRoof(FreeCAD.ActiveDocument." + obj.Name + ")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(translate("Arch", "Unable to create a roof"))
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(translate("Arch", "Please select a base object") + "\n")
|
||||
FreeCADGui.Control.showDialog(ArchComponent.SelectionTaskPanel())
|
||||
FreeCAD.ArchObserver = ArchComponent.ArchSelectionObserver(nextCommand = "Arch_Roof")
|
||||
FreeCADGui.Selection.addObserver(FreeCAD.ArchObserver)
|
||||
|
||||
|
||||
class _Roof(ArchComponent.Component):
|
||||
'''The Roof object'''
|
||||
@@ -1053,6 +952,3 @@ class _RoofTaskPanel:
|
||||
QtGui.QApplication.translate("Arch", "Overhang (mm)", None),
|
||||
QtGui.QApplication.translate("Arch", "Height (mm)", None)])
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand("Arch_Roof", _CommandRoof())
|
||||
@@ -53,28 +53,6 @@ verbose = True # change this for silent recomputes
|
||||
|
||||
|
||||
|
||||
class CommandArchSchedule:
|
||||
|
||||
"the Arch Schedule command definition"
|
||||
|
||||
def GetResources(self):
|
||||
return {'Pixmap': 'Arch_Schedule',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Schedule","Schedule"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Schedule","Creates a schedule to collect data from the model")}
|
||||
|
||||
def Activated(self):
|
||||
if hasattr(self,"taskd"):
|
||||
if self.taskd:
|
||||
self.taskd.form.hide()
|
||||
self.taskd = ArchScheduleTaskPanel()
|
||||
|
||||
def IsActive(self):
|
||||
if FreeCAD.ActiveDocument:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class _ArchScheduleDocObserver:
|
||||
|
||||
"doc observer to monitor all recomputes"
|
||||
@@ -769,5 +747,3 @@ class ArchScheduleTaskPanel:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Schedule',CommandArchSchedule())
|
||||
@@ -57,34 +57,6 @@ else:
|
||||
|
||||
ISRENDERING = False # flag to prevent concurrent runs of the coin renderer
|
||||
|
||||
def makeSectionPlane(objectslist=None,name=None):
|
||||
|
||||
"""makeSectionPlane([objectslist],[name]) : Creates a Section plane objects including the
|
||||
given objects. If no object is given, the whole document will be considered."""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","Section")
|
||||
obj.Label = name if name else translate("Arch","Section")
|
||||
_SectionPlane(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderSectionPlane(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.Objects = objectslist
|
||||
bb = FreeCAD.BoundBox()
|
||||
for o in Draft.get_group_contents(objectslist):
|
||||
if hasattr(o,"Shape") and hasattr(o.Shape,"BoundBox"):
|
||||
bb.add(o.Shape.BoundBox)
|
||||
import WorkingPlane
|
||||
obj.Placement = WorkingPlane.get_working_plane().get_placement()
|
||||
obj.Placement.Base = bb.Center
|
||||
if FreeCAD.GuiUp:
|
||||
margin = bb.XLength*0.1
|
||||
obj.ViewObject.DisplayLength = bb.XLength+margin
|
||||
obj.ViewObject.DisplayHeight = bb.YLength+margin
|
||||
return obj
|
||||
|
||||
|
||||
def getSectionData(source):
|
||||
|
||||
@@ -825,38 +797,6 @@ def closeViewer(name):
|
||||
sw.close()
|
||||
|
||||
|
||||
|
||||
class _CommandSectionPlane:
|
||||
|
||||
"the Arch SectionPlane command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_SectionPlane',
|
||||
'Accel': "S, E",
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_SectionPlane","Section Plane"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_SectionPlane","Creates a section plane object, including the selected objects")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
ss = "["
|
||||
for o in sel:
|
||||
if len(ss) > 1:
|
||||
ss += ","
|
||||
ss += "FreeCAD.ActiveDocument."+o.Name
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Section Plane"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("section = Arch.makeSectionPlane("+ss+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _SectionPlane:
|
||||
|
||||
"A section plane object"
|
||||
@@ -1398,5 +1338,3 @@ class SectionPlaneTaskPanel:
|
||||
self.recenterButton.setText(QtGui.QApplication.translate("Arch", "Center", None))
|
||||
self.recenterButton.setToolTip(QtGui.QApplication.translate("Arch", "Centers the plane on the objects in the list above", None))
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_SectionPlane',_CommandSectionPlane())
|
||||
@@ -61,31 +61,6 @@ __author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
|
||||
def makeSite(objectslist=None,baseobj=None,name=None):
|
||||
|
||||
'''makeBuilding([objectslist],[baseobj],[name]): creates a site including the
|
||||
objects from the given list.'''
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
import Part
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Site")
|
||||
obj.Label = name if name else translate("Arch","Site")
|
||||
_Site(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderSite(obj.ViewObject)
|
||||
if objectslist:
|
||||
obj.Group = objectslist
|
||||
if baseobj:
|
||||
import Part
|
||||
if isinstance(baseobj,Part.Shape):
|
||||
obj.Shape = baseobj
|
||||
else:
|
||||
obj.Terrain = baseobj
|
||||
return obj
|
||||
|
||||
|
||||
def toNode(shape):
|
||||
|
||||
"""builds a linear pivy node from a shape"""
|
||||
@@ -503,57 +478,6 @@ class Compass(object):
|
||||
|
||||
return coords
|
||||
|
||||
class _CommandSite:
|
||||
|
||||
"the Arch Site command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Site',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Site","Site"),
|
||||
'Accel': "S, I",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Site","Creates a site including selected objects.")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
link = params.get_param_arch("FreeLinking")
|
||||
siteobj = []
|
||||
warning = False
|
||||
for obj in sel:
|
||||
if (Draft.getType(obj) == "Building") or (hasattr(obj,"IfcType") and obj.IfcType == "Building"):
|
||||
siteobj.append(obj)
|
||||
else:
|
||||
if link:
|
||||
siteobj.append(obj)
|
||||
else:
|
||||
warning = True
|
||||
if warning:
|
||||
message = translate( "Arch" , "Please either select only Building objects or nothing at all!\n\
|
||||
Site is not allowed to accept any other object besides Building.\n\
|
||||
Other objects will be removed from the selection.\n\
|
||||
Note: You can change that in the preferences.")
|
||||
ArchCommands.printMessage( message )
|
||||
if sel and len(siteobj) == 0:
|
||||
message = translate( "Arch" , "There is no valid object in the selection.\n\
|
||||
Site creation aborted.") + "\n"
|
||||
ArchCommands.printMessage( message )
|
||||
else:
|
||||
ss = "[ "
|
||||
for o in siteobj:
|
||||
ss += "FreeCAD.ActiveDocument." + o.Name + ", "
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Site"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeSite("+ss+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
|
||||
@@ -1242,6 +1166,3 @@ class _ViewProviderSite:
|
||||
|
||||
return None
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Site',_CommandSite())
|
||||
@@ -172,33 +172,7 @@ else:
|
||||
# Spaces define an open volume inside or outside a
|
||||
# building, ie. a room.
|
||||
|
||||
def makeSpace(objects=None,baseobj=None,name=None):
|
||||
|
||||
"""makeSpace([objects],[baseobj],[name]): Creates a space object from the given objects.
|
||||
Objects can be one document object, in which case it becomes the base shape of the space
|
||||
object, or a list of selection objects as got from getSelectionEx(), or a list of tuples
|
||||
(object, subobjectname)"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Space")
|
||||
obj.Label = name if name else translate("Arch","Space")
|
||||
_Space(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderSpace(obj.ViewObject)
|
||||
if baseobj:
|
||||
objects = baseobj
|
||||
if objects:
|
||||
if not isinstance(objects,list):
|
||||
objects = [objects]
|
||||
if len(objects) == 1:
|
||||
obj.Base = objects[0]
|
||||
if FreeCAD.GuiUp:
|
||||
objects[0].ViewObject.hide()
|
||||
else:
|
||||
obj.Proxy.addSubobjects(obj,objects)
|
||||
return obj
|
||||
|
||||
def addSpaceBoundaries(space,subobjects):
|
||||
|
||||
@@ -222,42 +196,6 @@ def removeSpaceBoundaries(space,objects):
|
||||
break
|
||||
space.Boundaries = bounds
|
||||
|
||||
class _CommandSpace:
|
||||
|
||||
"the Arch Space command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Space',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Space","Space"),
|
||||
'Accel': "S, P",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Space","Creates a space object from selected boundary objects")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Space"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if sel:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if len(sel) == 1:
|
||||
FreeCADGui.doCommand("obj = Arch.makeSpace(FreeCADGui.Selection.getSelection())")
|
||||
else:
|
||||
FreeCADGui.doCommand("obj = Arch.makeSpace(FreeCADGui.Selection.getSelectionEx())")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(translate("Arch","Please select a base object")+"\n")
|
||||
FreeCADGui.Control.showDialog(ArchComponent.SelectionTaskPanel())
|
||||
FreeCAD.ArchObserver = ArchComponent.ArchSelectionObserver(nextCommand="Arch_Space")
|
||||
FreeCADGui.Selection.addObserver(FreeCAD.ArchObserver)
|
||||
|
||||
|
||||
class _Space(ArchComponent.Component):
|
||||
|
||||
@@ -727,7 +665,7 @@ class _ViewProviderSpace(ArchComponent.ViewProviderComponent):
|
||||
|
||||
elif prop == "ShapeColor":
|
||||
if hasattr(vobj,"ShapeColor"):
|
||||
self.fmat.diffuseColor.setValue((vobj.ShapeColor[0],vobj.ShapeColor[1],vobj.ShapeColor[2]))
|
||||
self.fmat = vobj.ShapeColor.getValue()
|
||||
|
||||
elif prop == "Transparency":
|
||||
if hasattr(vobj,"Transparency"):
|
||||
@@ -839,7 +777,3 @@ class SpaceTaskPanel(ArchComponent.ComponentTaskPanel):
|
||||
break
|
||||
self.obj.Boundaries = bounds
|
||||
self.updateBoundaries()
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Space',_CommandSpace())
|
||||
@@ -51,197 +51,6 @@ else:
|
||||
zeroMM = FreeCAD.Units.Quantity('0mm')
|
||||
|
||||
|
||||
def makeStairs(baseobj=None,length=None,width=None,height=None,steps=None,name=None):
|
||||
|
||||
"""makeStairs([baseobj],[length],[width],[height],[steps],[name]): creates a Stairs
|
||||
objects with given attributes."""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
|
||||
stairs = []
|
||||
additions = []
|
||||
label = name if name else translate("Arch","Stairs")
|
||||
|
||||
def setProperty(obj,length,width,height,steps):
|
||||
if length:
|
||||
obj.Length = length
|
||||
else:
|
||||
obj.Length = params.get_param_arch("StairsLength")
|
||||
if width:
|
||||
obj.Width = width
|
||||
else:
|
||||
obj.Width = params.get_param_arch("StairsWidth")
|
||||
if height:
|
||||
obj.Height = height
|
||||
else:
|
||||
obj.Height = params.get_param_arch("StairsHeight")
|
||||
if steps:
|
||||
obj.NumberOfSteps = steps
|
||||
obj.Structure = "Massive"
|
||||
obj.StructureThickness = 150
|
||||
obj.DownSlabThickness = 150
|
||||
obj.UpSlabThickness = 150
|
||||
|
||||
obj.RailingOffsetLeft = 60
|
||||
obj.RailingOffsetRight = 60
|
||||
obj.RailingHeightLeft = 900
|
||||
obj.RailingHeightRight = 900
|
||||
|
||||
if baseobj:
|
||||
if not isinstance(baseobj,list):
|
||||
baseobj = [baseobj]
|
||||
lenSelection = len(baseobj)
|
||||
if lenSelection > 1:
|
||||
stair = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Stairs")
|
||||
stair.Label = label
|
||||
_Stairs(stair)
|
||||
stairs.append(stair)
|
||||
stairs[0].Label = label
|
||||
i = 1
|
||||
else:
|
||||
i = 0
|
||||
for baseobjI in baseobj:
|
||||
stair = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Stairs")
|
||||
stair.Label = label
|
||||
_Stairs(stair)
|
||||
stairs.append(stair)
|
||||
stairs[i].Label = label
|
||||
stairs[i].Base = baseobjI
|
||||
|
||||
if len(baseobjI.Shape.Edges) > 1:
|
||||
stepsI = 1 #'landing' if 'multi-edges' currently
|
||||
elif steps:
|
||||
stepsI = steps
|
||||
else:
|
||||
stepsI = 20
|
||||
setProperty(stairs[i],None,width,height,stepsI)
|
||||
|
||||
if i > 1:
|
||||
additions.append(stairs[i])
|
||||
stairs[i].LastSegment = stairs[i-1]
|
||||
else:
|
||||
if len(stairs) > 1: # i.e. length >1, have a 'master' staircase created
|
||||
stairs[0].Base = stairs[1]
|
||||
i += 1
|
||||
if lenSelection > 1:
|
||||
stairs[0].Additions = additions
|
||||
|
||||
else:
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Stairs")
|
||||
obj.Label = label
|
||||
_Stairs(obj)
|
||||
setProperty(obj,length,width,height,steps)
|
||||
stairs.append(obj)
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
if baseobj:
|
||||
for stair in stairs:
|
||||
_ViewProviderStairs(stair.ViewObject)
|
||||
else:
|
||||
_ViewProviderStairs(obj.ViewObject)
|
||||
|
||||
if stairs:
|
||||
for stair in stairs:
|
||||
stair.recompute()
|
||||
makeRailing(stairs)
|
||||
# return stairs - all other functions expect one object as return value
|
||||
return stairs[0]
|
||||
else:
|
||||
obj.recompute()
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def makeRailing(stairs):
|
||||
"simple make Railing function testing"
|
||||
|
||||
def makeRailingLorR(stairs,side="L"):
|
||||
for stair in reversed(stairs):
|
||||
if side == "L":
|
||||
outlineLR = stair.OutlineLeft
|
||||
outlineLRAll = stair.OutlineLeftAll
|
||||
stairRailingLR = "RailingLeft"
|
||||
elif side == "R":
|
||||
outlineLR = stair.OutlineRight
|
||||
outlineLRAll = stair.OutlineRightAll
|
||||
stairRailingLR = "RailingRight"
|
||||
if outlineLR or outlineLRAll:
|
||||
lrRail = ArchPipe.makePipe(baseobj=None,diameter=0,length=0,placement=None,name=translate("Arch","Railing"))
|
||||
if outlineLRAll:
|
||||
setattr(stair, stairRailingLR, lrRail)
|
||||
break
|
||||
elif outlineLR:
|
||||
setattr(stair, stairRailingLR, lrRail)
|
||||
|
||||
if stairs is None:
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
sel0 = sel[0]
|
||||
stairs = []
|
||||
# TODO currently consider 1st selected object, then would tackle multiple objects?
|
||||
if Draft.getType(sel[0]) == "Stairs":
|
||||
stairs.append(sel0)
|
||||
if Draft.getType(sel0.Base) == "Stairs":
|
||||
stairs.append(sel0.Base)
|
||||
additions = sel0.Additions
|
||||
for additionsI in additions:
|
||||
if Draft.getType(additionsI) == "Stairs":
|
||||
stairs.append(additionsI)
|
||||
else:
|
||||
stairs.append(sel[0])
|
||||
else:
|
||||
print("No Stairs object selected")
|
||||
return
|
||||
|
||||
makeRailingLorR(stairs,"L")
|
||||
makeRailingLorR(stairs,"R")
|
||||
|
||||
|
||||
class _CommandStairs:
|
||||
|
||||
"the Arch Stairs command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Stairs',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Stairs","Stairs"),
|
||||
'Accel': "S, R",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Stairs","Creates a flight of stairs")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Stairs"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
|
||||
# a list of 'segment' / 'flight' of stairs
|
||||
stairs = []
|
||||
additions = []
|
||||
|
||||
if len(FreeCADGui.Selection.getSelection()) > 0:
|
||||
n = []
|
||||
nStr = ""
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
n.append(obj.Name) # would no longer use
|
||||
if nStr != "":
|
||||
nStr = nStr + ","
|
||||
nStr = nStr + "FreeCAD.ActiveDocument." + obj.Name
|
||||
FreeCADGui.doCommand("obj = Arch.makeStairs(baseobj=["+nStr+"])")
|
||||
|
||||
else:
|
||||
FreeCADGui.doCommand("obj = Arch.makeStairs(steps="+str(params.get_param_arch("StairsSteps"))+")")
|
||||
|
||||
FreeCADGui.addModule("Draft")
|
||||
for obj in stairs:
|
||||
Draft.autogroup(obj) # seems not working?
|
||||
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class _Stairs(ArchComponent.Component):
|
||||
|
||||
@@ -1521,5 +1330,3 @@ class _ViewProviderStairs(ArchComponent.ViewProviderComponent):
|
||||
return []
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Stairs',_CommandStairs())
|
||||
@@ -24,6 +24,7 @@ import FreeCAD,Draft,ArchComponent,DraftVecUtils,ArchCommands
|
||||
from FreeCAD import Vector
|
||||
import ArchProfile
|
||||
from draftutils import params
|
||||
from draftutils import gui_utils
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
@@ -342,7 +343,7 @@ class _CommandStructure:
|
||||
self.bpoint = point
|
||||
FreeCADGui.Snapper.getPoint(last=point,callback=self.getPoint,movecallback=self.update,extradlg=[self.taskbox(),self.precast.form,self.dents.form],title=translate("Arch","Next point")+":",mode="line")
|
||||
return
|
||||
self.tracker.finalize()
|
||||
self.tracker.off()
|
||||
FreeCAD.activeDraftCommand = None
|
||||
FreeCADGui.Snapper.off()
|
||||
horiz = True # determines the type of rotation to apply to the final object
|
||||
@@ -410,6 +411,8 @@ class _CommandStructure:
|
||||
FreeCADGui.doCommand("Draft.autogroup(s)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
gui_utils.end_all_events()
|
||||
self.tracker.finalize()
|
||||
if self.continueCmd:
|
||||
self.Activated()
|
||||
|
||||
@@ -51,86 +51,6 @@ rodmodes = ("/|/|/|",
|
||||
"/|\\|/|\\",
|
||||
)
|
||||
|
||||
def makeTruss(baseobj=None,name=None):
|
||||
|
||||
"""
|
||||
makeTruss([baseobj],[name]): Creates a space object from the given object (a line)
|
||||
"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Truss")
|
||||
obj.Label = name if name else translate("Arch","Truss")
|
||||
Truss(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
ViewProviderTruss(obj.ViewObject)
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if FreeCAD.GuiUp:
|
||||
baseobj.ViewObject.hide()
|
||||
return obj
|
||||
|
||||
|
||||
class CommandArchTruss:
|
||||
|
||||
"the Arch Truss command definition"
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Truss',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Truss","Truss"),
|
||||
'Accel': "T, U",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Truss","Creates a truss object from selected line or from scratch")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
if len(sel) > 1:
|
||||
FreeCAD.Console.PrintError(translate("Arch","Please select only one base object or none")+"\n")
|
||||
elif len(sel) == 1:
|
||||
# build on selection
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Truss"))
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("obj = Arch.makeTruss(FreeCAD.ActiveDocument."+FreeCADGui.Selection.getSelection()[0].Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
else:
|
||||
# interactive line drawing
|
||||
self.points = []
|
||||
import WorkingPlane
|
||||
WorkingPlane.get_working_plane()
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint)
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
"""Callback for clicks during interactive mode"""
|
||||
|
||||
if point is None:
|
||||
# cancelled
|
||||
return
|
||||
self.points.append(point)
|
||||
if len(self.points) == 1:
|
||||
FreeCADGui.Snapper.getPoint(last=self.points[0],callback=self.getPoint)
|
||||
elif len(self.points) == 2:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Truss"))
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("base = Draft.makeLine(FreeCAD."+str(self.points[0])+",FreeCAD."+str(self.points[1])+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeTruss(base)")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class Truss(ArchComponent.Component):
|
||||
|
||||
@@ -407,6 +327,3 @@ class ViewProviderTruss(ArchComponent.ViewProviderComponent):
|
||||
import Arch_rc
|
||||
return ":/icons/Arch_Truss_Tree.svg"
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Truss',CommandArchTruss())
|
||||
@@ -59,151 +59,7 @@ __title__ = "FreeCAD Wall"
|
||||
__author__ = "Yorik van Havre"
|
||||
__url__ = "https://www.freecad.org"
|
||||
|
||||
def makeWall(baseobj=None,height=None,length=None,width=None,align=None,face=None,name=None):
|
||||
"""Create a wall based on a given object, and returns the generated wall.
|
||||
|
||||
TODO: It is unclear what defines which units this function uses.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
baseobj: <Part::PartFeature>, optional
|
||||
The base object with which to build the wall. This can be a sketch, a
|
||||
draft object, a face, or a solid. It can also be left as None.
|
||||
height: float, optional
|
||||
The height of the wall.
|
||||
length: float, optional
|
||||
The length of the wall. Not used if the wall is based off an object.
|
||||
Will use Arch default if left empty.
|
||||
width: float, optional
|
||||
The width of the wall. Not used if the base object is a face. Will use
|
||||
Arch default if left empty.
|
||||
align: str, optional
|
||||
Either "Center", "Left", or "Right". Effects the alignment of the wall
|
||||
on its baseline.
|
||||
face: int, optional
|
||||
The index number of a face on the given baseobj, to base the wall on.
|
||||
name: str, optional
|
||||
The name to give to the created wall.
|
||||
|
||||
Returns
|
||||
-------
|
||||
<Part::FeaturePython>
|
||||
Returns the generated wall.
|
||||
|
||||
Notes
|
||||
-----
|
||||
Creates a new <Part::FeaturePython> object, and turns it into a parametric wall
|
||||
object. This <Part::FeaturePython> object does not yet have any shape.
|
||||
|
||||
The wall then uses the baseobj.Shape as the basis to extrude out a wall shape,
|
||||
giving the new <Part::FeaturePython> object a shape.
|
||||
|
||||
It then hides the original baseobj.
|
||||
"""
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Wall")
|
||||
if name:
|
||||
obj.Label = name
|
||||
else:
|
||||
obj.Label = translate("Arch","Wall")
|
||||
_Wall(obj)
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderWall(obj.ViewObject)
|
||||
if baseobj:
|
||||
if hasattr(baseobj,'Shape') or baseobj.isDerivedFrom("Mesh::Feature"):
|
||||
obj.Base = baseobj
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(str(translate("Arch","Walls can only be based on Part or Mesh objects")))
|
||||
if face:
|
||||
obj.Face = face
|
||||
if length:
|
||||
obj.Length = length
|
||||
if width:
|
||||
obj.Width = width
|
||||
else:
|
||||
obj.Width = params.get_param_arch("WallWidth")
|
||||
if height:
|
||||
obj.Height = height
|
||||
else:
|
||||
obj.Height = params.get_param_arch("WallHeight")
|
||||
if align:
|
||||
obj.Align = align
|
||||
else:
|
||||
obj.Align = ["Center","Left","Right"][params.get_param_arch("WallAlignment")]
|
||||
if obj.Base and FreeCAD.GuiUp:
|
||||
if Draft.getType(obj.Base) != "Space":
|
||||
obj.Base.ViewObject.hide()
|
||||
return obj
|
||||
|
||||
def joinWalls(walls,delete=False):
|
||||
"""Join the given list of walls into one sketch-based wall.
|
||||
|
||||
Take the first wall in the list, and adds on the other walls in the list.
|
||||
Return the modified first wall.
|
||||
|
||||
Setting delete to True, will delete the other walls. Only join walls
|
||||
if the walls have the same width, height and alignment.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
walls: list of <Part::FeaturePython>
|
||||
List containing the walls to add to the first wall in the list. Walls must
|
||||
be based off a base object.
|
||||
delete: bool, optional
|
||||
If True, deletes the other walls in the list.
|
||||
|
||||
Returns
|
||||
-------
|
||||
<Part::FeaturePython>
|
||||
"""
|
||||
|
||||
import Part
|
||||
if not walls:
|
||||
return None
|
||||
if not isinstance(walls,list):
|
||||
walls = [walls]
|
||||
if not areSameWallTypes(walls):
|
||||
return None
|
||||
deleteList = []
|
||||
base = walls.pop()
|
||||
if base.Base:
|
||||
if base.Base.Shape.Faces:
|
||||
return None
|
||||
# Use ArchSketch if SketchArch add-on is present
|
||||
if Draft.getType(base.Base) == "ArchSketch":
|
||||
sk = base.Base
|
||||
else:
|
||||
try:
|
||||
import ArchSketchObject
|
||||
newSk=ArchSketchObject.makeArchSketch()
|
||||
except:
|
||||
if Draft.getType(base.Base) != "Sketcher::SketchObject":
|
||||
newSk=FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject","WallTrace")
|
||||
else:
|
||||
newSk=None
|
||||
if newSk:
|
||||
sk = Draft.makeSketch(base.Base,autoconstraints=True, addTo=newSk)
|
||||
base.Base = sk
|
||||
else:
|
||||
sk = base.Base
|
||||
for w in walls:
|
||||
if w.Base:
|
||||
if not w.Base.Shape.Faces:
|
||||
for e in w.Base.Shape.Edges:
|
||||
l = e.Curve
|
||||
if isinstance(l,Part.Line):
|
||||
l = Part.LineSegment(e.Vertexes[0].Point,e.Vertexes[-1].Point)
|
||||
sk.addGeometry(l)
|
||||
deleteList.append(w.Name)
|
||||
if delete:
|
||||
for n in deleteList:
|
||||
FreeCAD.ActiveDocument.removeObject(n)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
base.ViewObject.show()
|
||||
return base
|
||||
|
||||
def mergeShapes(w1,w2):
|
||||
"""Not currently implemented.
|
||||
@@ -265,447 +121,6 @@ def areSameWallTypes(walls):
|
||||
return True
|
||||
|
||||
|
||||
|
||||
class _CommandWall:
|
||||
"""The command definition for the Arch workbench's gui tool, Arch Wall.
|
||||
|
||||
A tool for creating Arch walls.
|
||||
|
||||
Create a wall from the object selected by the user. If no objects are
|
||||
selected, enter an interactive mode to create a wall using selected points
|
||||
to create a base.
|
||||
|
||||
Find documentation on the end user usage of Arch Wall here:
|
||||
https://wiki.freecad.org/Arch_Wall
|
||||
"""
|
||||
|
||||
def GetResources(self):
|
||||
"""Returns a dictionary with the visual aspects of the Arch Wall tool."""
|
||||
|
||||
return {'Pixmap' : 'Arch_Wall',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Wall","Wall"),
|
||||
'Accel': "W, A",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Wall","Creates a wall object from scratch or from a selected object (wire, face or solid)")}
|
||||
|
||||
def IsActive(self):
|
||||
"""Determines whether or not the Arch Wall tool is active.
|
||||
|
||||
Inactive commands are indicated by a greyed-out icon in the menus and
|
||||
toolbars.
|
||||
"""
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
"""Executed when Arch Wall is called.
|
||||
|
||||
Creates a wall from the object selected by the user. If no objects are
|
||||
selected, enters an interactive mode to create a wall using selected
|
||||
points to create a base.
|
||||
"""
|
||||
|
||||
self.Align = ["Center","Left","Right"][params.get_param_arch("WallAlignment")]
|
||||
self.MultiMat = None
|
||||
self.Length = None
|
||||
self.lengthValue = 0
|
||||
self.continueCmd = False
|
||||
self.Width = params.get_param_arch("WallWidth")
|
||||
self.Height = params.get_param_arch("WallHeight")
|
||||
self.JOIN_WALLS_SKETCHES = params.get_param_arch("joinWallSketches")
|
||||
self.AUTOJOIN = params.get_param_arch("autoJoinWalls")
|
||||
sel = FreeCADGui.Selection.getSelectionEx()
|
||||
done = False
|
||||
self.existing = []
|
||||
self.wp = None
|
||||
|
||||
if sel:
|
||||
# automatic mode
|
||||
import Draft
|
||||
if Draft.getType(sel[0].Object) != "Wall":
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Wall"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
for selobj in sel:
|
||||
if Draft.getType(selobj.Object) == "Space":
|
||||
spacedone = False
|
||||
if selobj.HasSubObjects:
|
||||
if "Face" in selobj.SubElementNames[0]:
|
||||
idx = int(selobj.SubElementNames[0][4:])
|
||||
FreeCADGui.doCommand("obj = Arch.makeWall(FreeCAD.ActiveDocument."+selobj.Object.Name+",face="+str(idx)+")")
|
||||
spacedone = True
|
||||
if not spacedone:
|
||||
FreeCADGui.doCommand('obj = Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
else:
|
||||
FreeCADGui.doCommand('obj = Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
done = True
|
||||
|
||||
if not done:
|
||||
# interactive mode
|
||||
|
||||
self.points = []
|
||||
import WorkingPlane
|
||||
self.wp = WorkingPlane.get_working_plane()
|
||||
self.tracker = DraftTrackers.boxTracker()
|
||||
FreeCAD.activeDraftCommand = self # register as a Draft command for auto grid on/off
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,
|
||||
extradlg=self.taskbox(),
|
||||
title=translate("Arch","First point of wall")+":")
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
"""Callback for clicks during interactive mode.
|
||||
|
||||
When method _CommandWall.Activated() has entered the interactive mode,
|
||||
this callback runs when the user clicks.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
point: <class 'Base.Vector'>
|
||||
The point the user has selected.
|
||||
obj: <Part::PartFeature>, optional
|
||||
The object the user's cursor snapped to, if any.
|
||||
"""
|
||||
|
||||
if obj:
|
||||
if Draft.getType(obj) == "Wall":
|
||||
if not obj in self.existing:
|
||||
self.existing.append(obj)
|
||||
if point is None:
|
||||
self.tracker.finalize()
|
||||
FreeCAD.activeDraftCommand = None
|
||||
FreeCADGui.Snapper.off()
|
||||
return
|
||||
self.points.append(point)
|
||||
if len(self.points) == 1:
|
||||
self.tracker.width(self.Width)
|
||||
self.tracker.height(self.Height)
|
||||
self.tracker.on()
|
||||
FreeCADGui.Snapper.getPoint(last=self.points[0],
|
||||
callback=self.getPoint,
|
||||
movecallback=self.update,
|
||||
extradlg=self.taskbox(),
|
||||
title=translate("Arch","Next point")+":",mode="line")
|
||||
|
||||
elif len(self.points) == 2:
|
||||
import Part
|
||||
l = Part.LineSegment(self.wp.get_local_coords(self.points[0]),
|
||||
self.wp.get_local_coords(self.points[1]))
|
||||
self.tracker.finalize()
|
||||
FreeCAD.activeDraftCommand = None
|
||||
FreeCADGui.Snapper.off()
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Wall"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand('import Part')
|
||||
FreeCADGui.doCommand('trace=Part.LineSegment(FreeCAD.'+str(l.StartPoint)+',FreeCAD.'+str(l.EndPoint)+')')
|
||||
if not self.existing:
|
||||
# no existing wall snapped, just add a default wall
|
||||
self.addDefault()
|
||||
else:
|
||||
if self.JOIN_WALLS_SKETCHES:
|
||||
# join existing subwalls first if possible, then add the new one
|
||||
w = joinWalls(self.existing)
|
||||
if w:
|
||||
if areSameWallTypes([w,self]):
|
||||
FreeCADGui.doCommand('FreeCAD.ActiveDocument.'+w.Name+'.Base.addGeometry(trace)')
|
||||
else:
|
||||
# if not possible, add new wall as addition to the existing one
|
||||
self.addDefault()
|
||||
if self.AUTOJOIN:
|
||||
FreeCADGui.doCommand('Arch.addComponents(FreeCAD.ActiveDocument.'+FreeCAD.ActiveDocument.Objects[-1].Name+',FreeCAD.ActiveDocument.'+w.Name+')')
|
||||
else:
|
||||
self.addDefault()
|
||||
else:
|
||||
# add new wall as addition to the first existing one
|
||||
self.addDefault()
|
||||
if self.AUTOJOIN:
|
||||
FreeCADGui.doCommand('Arch.addComponents(FreeCAD.ActiveDocument.'+FreeCAD.ActiveDocument.Objects[-1].Name+',FreeCAD.ActiveDocument.'+self.existing[0].Name+')')
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
if self.continueCmd:
|
||||
self.Activated()
|
||||
|
||||
def addDefault(self):
|
||||
"""Create a wall using a line segment, with all parameters as the default.
|
||||
|
||||
Used solely by _CommandWall.getPoint() when the interactive mode has
|
||||
selected two points.
|
||||
|
||||
Relies on the assumption that FreeCADGui.doCommand() has already
|
||||
created a Part.LineSegment assigned as the variable "trace"
|
||||
"""
|
||||
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.addModule("WorkingPlane")
|
||||
FreeCADGui.doCommand("wp = WorkingPlane.get_working_plane()")
|
||||
if params.get_param_arch("WallSketches"):
|
||||
# Use ArchSketch if SketchArch add-on is present
|
||||
try:
|
||||
import ArchSketchObject
|
||||
FreeCADGui.doCommand('import ArchSketchObject')
|
||||
FreeCADGui.doCommand('base=ArchSketchObject.makeArchSketch()')
|
||||
except:
|
||||
FreeCADGui.doCommand('base=FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject","WallTrace")')
|
||||
FreeCADGui.doCommand('base.Placement = wp.get_placement()')
|
||||
FreeCADGui.doCommand('base.addGeometry(trace)')
|
||||
else:
|
||||
FreeCADGui.doCommand('base=Draft.make_line(trace)')
|
||||
# The created line should not stay selected as this causes an issue in continue mode.
|
||||
# Two walls would then be created based on the same line.
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
FreeCADGui.doCommand('base.Placement = wp.get_placement()')
|
||||
FreeCADGui.doCommand('FreeCAD.ActiveDocument.recompute()')
|
||||
FreeCADGui.doCommand('wall = Arch.makeWall(base,width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")')
|
||||
FreeCADGui.doCommand('wall.Normal = wp.axis')
|
||||
if self.MultiMat:
|
||||
FreeCADGui.doCommand("wall.Material = FreeCAD.ActiveDocument."+self.MultiMat.Name)
|
||||
FreeCADGui.doCommand("Draft.autogroup(wall)")
|
||||
|
||||
def update(self,point,info):
|
||||
# info parameter is not used but needed for compatibility with the snapper
|
||||
|
||||
"""Callback for the mouse moving during the interactive mode.
|
||||
|
||||
Update the active dialog box to show the coordinates of the location of
|
||||
the cursor. Also show the length the line would take, if the user
|
||||
selected that point.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
point: <class 'Base.Vector'>
|
||||
The point the cursor is currently at, or has snapped to.
|
||||
"""
|
||||
|
||||
if FreeCADGui.Control.activeDialog():
|
||||
b = self.points[0]
|
||||
n = self.wp.axis
|
||||
bv = point.sub(b)
|
||||
dv = bv.cross(n)
|
||||
dv = DraftVecUtils.scaleTo(dv,self.Width/2)
|
||||
if self.Align == "Center":
|
||||
self.tracker.update([b,point])
|
||||
elif self.Align == "Left":
|
||||
self.tracker.update([b.add(dv),point.add(dv)])
|
||||
else:
|
||||
dv = dv.negative()
|
||||
self.tracker.update([b.add(dv),point.add(dv)])
|
||||
if self.Length:
|
||||
self.Length.setText(FreeCAD.Units.Quantity(bv.Length,FreeCAD.Units.Length).UserString)
|
||||
|
||||
def taskbox(self):
|
||||
"""Set up a simple gui widget for the interactive mode."""
|
||||
|
||||
w = QtGui.QWidget()
|
||||
ui = FreeCADGui.UiLoader()
|
||||
w.setWindowTitle(translate("Arch","Wall options"))
|
||||
grid = QtGui.QGridLayout(w)
|
||||
|
||||
matCombo = QtGui.QComboBox()
|
||||
matCombo.addItem(translate("Arch","Wall Presets..."))
|
||||
matCombo.setToolTip(translate("Arch","This list shows all the MultiMaterials objects of this document. Create some to define wall types."))
|
||||
self.multimats = []
|
||||
self.MultiMat = None
|
||||
for o in FreeCAD.ActiveDocument.Objects:
|
||||
if Draft.getType(o) == "MultiMaterial":
|
||||
self.multimats.append(o)
|
||||
matCombo.addItem(o.Label)
|
||||
if hasattr(FreeCAD,"LastArchMultiMaterial"):
|
||||
for i,o in enumerate(self.multimats):
|
||||
if o.Name == FreeCAD.LastArchMultiMaterial:
|
||||
matCombo.setCurrentIndex(i+1)
|
||||
self.MultiMat = o
|
||||
grid.addWidget(matCombo,0,0,1,2)
|
||||
|
||||
label5 = QtGui.QLabel(translate("Arch","Length"))
|
||||
self.Length = ui.createWidget("Gui::InputField")
|
||||
self.Length.setText("0.00 mm")
|
||||
grid.addWidget(label5,1,0,1,1)
|
||||
grid.addWidget(self.Length,1,1,1,1)
|
||||
|
||||
label1 = QtGui.QLabel(translate("Arch","Width"))
|
||||
value1 = ui.createWidget("Gui::InputField")
|
||||
value1.setText(FreeCAD.Units.Quantity(self.Width,FreeCAD.Units.Length).UserString)
|
||||
grid.addWidget(label1,2,0,1,1)
|
||||
grid.addWidget(value1,2,1,1,1)
|
||||
|
||||
label2 = QtGui.QLabel(translate("Arch","Height"))
|
||||
value2 = ui.createWidget("Gui::InputField")
|
||||
value2.setText(FreeCAD.Units.Quantity(self.Height,FreeCAD.Units.Length).UserString)
|
||||
grid.addWidget(label2,3,0,1,1)
|
||||
grid.addWidget(value2,3,1,1,1)
|
||||
|
||||
label3 = QtGui.QLabel(translate("Arch","Alignment"))
|
||||
value3 = QtGui.QComboBox()
|
||||
items = [translate("Arch","Center"),translate("Arch","Left"),translate("Arch","Right")]
|
||||
value3.addItems(items)
|
||||
value3.setCurrentIndex(["Center","Left","Right"].index(self.Align))
|
||||
grid.addWidget(label3,4,0,1,1)
|
||||
grid.addWidget(value3,4,1,1,1)
|
||||
|
||||
label4 = QtGui.QLabel(translate("Arch","Con&tinue"))
|
||||
value4 = QtGui.QCheckBox()
|
||||
value4.setObjectName("ContinueCmd")
|
||||
value4.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label4.setBuddy(value4)
|
||||
self.continueCmd = params.get_param("ContinueMode")
|
||||
value4.setChecked(self.continueCmd)
|
||||
grid.addWidget(label4,5,0,1,1)
|
||||
grid.addWidget(value4,5,1,1,1)
|
||||
|
||||
label5 = QtGui.QLabel(translate("Arch","Use sketches"))
|
||||
value5 = QtGui.QCheckBox()
|
||||
value5.setObjectName("UseSketches")
|
||||
value5.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
label5.setBuddy(value5)
|
||||
value5.setChecked(params.get_param_arch("WallSketches"))
|
||||
grid.addWidget(label5,6,0,1,1)
|
||||
grid.addWidget(value5,6,1,1,1)
|
||||
|
||||
QtCore.QObject.connect(self.Length,QtCore.SIGNAL("valueChanged(double)"),self.setLength)
|
||||
QtCore.QObject.connect(value1,QtCore.SIGNAL("valueChanged(double)"),self.setWidth)
|
||||
QtCore.QObject.connect(value2,QtCore.SIGNAL("valueChanged(double)"),self.setHeight)
|
||||
QtCore.QObject.connect(value3,QtCore.SIGNAL("currentIndexChanged(int)"),self.setAlign)
|
||||
QtCore.QObject.connect(value4,QtCore.SIGNAL("stateChanged(int)"),self.setContinue)
|
||||
QtCore.QObject.connect(value5,QtCore.SIGNAL("stateChanged(int)"),self.setUseSketch)
|
||||
QtCore.QObject.connect(self.Length,QtCore.SIGNAL("returnPressed()"),value1.setFocus)
|
||||
QtCore.QObject.connect(self.Length,QtCore.SIGNAL("returnPressed()"),value1.selectAll)
|
||||
QtCore.QObject.connect(value1,QtCore.SIGNAL("returnPressed()"),value2.setFocus)
|
||||
QtCore.QObject.connect(value1,QtCore.SIGNAL("returnPressed()"),value2.selectAll)
|
||||
QtCore.QObject.connect(value2,QtCore.SIGNAL("returnPressed()"),self.createFromGUI)
|
||||
QtCore.QObject.connect(matCombo,QtCore.SIGNAL("currentIndexChanged(int)"),self.setMat)
|
||||
return w
|
||||
|
||||
def setMat(self,d):
|
||||
"""Simple callback for the interactive mode gui widget to set material."""
|
||||
|
||||
if d == 0:
|
||||
self.MultiMat = None
|
||||
del FreeCAD.LastArchMultiMaterial
|
||||
elif d <= len(self.multimats):
|
||||
self.MultiMat = self.multimats[d-1]
|
||||
FreeCAD.LastArchMultiMaterial = self.MultiMat.Name
|
||||
|
||||
def setLength(self,d):
|
||||
"""Simple callback for the interactive mode gui widget to set length."""
|
||||
|
||||
self.lengthValue = d
|
||||
|
||||
def setWidth(self,d):
|
||||
"""Simple callback for the interactive mode gui widget to set width."""
|
||||
|
||||
self.Width = d
|
||||
self.tracker.width(d)
|
||||
params.set_param_arch("WallWidth",d)
|
||||
|
||||
|
||||
def setHeight(self,d):
|
||||
"""Simple callback for the interactive mode gui widget to set height."""
|
||||
|
||||
self.Height = d
|
||||
self.tracker.height(d)
|
||||
params.set_param_arch("WallHeight",d)
|
||||
|
||||
def setAlign(self,i):
|
||||
"""Simple callback for the interactive mode gui widget to set alignment."""
|
||||
|
||||
self.Align = ["Center","Left","Right"][i]
|
||||
params.set_param_arch("WallAlignment",i)
|
||||
|
||||
def setContinue(self,i):
|
||||
"""Simple callback to set if the interactive mode will restart when finished.
|
||||
|
||||
This allows for several walls to be placed one after another.
|
||||
"""
|
||||
|
||||
self.continueCmd = bool(i)
|
||||
params.set_param("ContinueMode", bool(i))
|
||||
|
||||
def setUseSketch(self,i):
|
||||
"""Simple callback to set if walls should based on sketches."""
|
||||
|
||||
params.set_param_arch("WallSketches",bool(i))
|
||||
|
||||
def createFromGUI(self):
|
||||
"""Callback to create wall by using the _CommandWall.taskbox()"""
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Wall"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand('wall = Arch.makeWall(length='+str(self.lengthValue)+',width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")')
|
||||
if self.MultiMat:
|
||||
FreeCADGui.doCommand("wall.Material = FreeCAD.ActiveDocument."+self.MultiMat.Name)
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
if hasattr(FreeCADGui,"draftToolBar"):
|
||||
FreeCADGui.draftToolBar.escape()
|
||||
|
||||
|
||||
class _CommandMergeWalls:
|
||||
"""The command definition for the Arch workbench's gui tool, Arch MergeWalls.
|
||||
|
||||
A tool for merging walls.
|
||||
|
||||
Join two or more walls by using the ArchWall.joinWalls() function.
|
||||
|
||||
Find documentation on the end user usage of Arch Wall here:
|
||||
https://wiki.freecad.org/Arch_MergeWalls
|
||||
"""
|
||||
|
||||
def GetResources(self):
|
||||
"""Returns a dictionary with the visual aspects of the Arch MergeWalls tool."""
|
||||
|
||||
return {'Pixmap' : 'Arch_MergeWalls',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_MergeWalls","Merge Walls"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_MergeWalls","Merges the selected walls, if possible")}
|
||||
|
||||
def IsActive(self):
|
||||
"""Determines whether or not the Arch MergeWalls tool is active.
|
||||
|
||||
Inactive commands are indicated by a greyed-out icon in the menus and
|
||||
toolbars.
|
||||
"""
|
||||
|
||||
return bool(FreeCADGui.Selection.getSelection())
|
||||
|
||||
def Activated(self):
|
||||
"""Executed when Arch MergeWalls is called.
|
||||
|
||||
Call ArchWall.joinWalls() on walls selected by the user, with the
|
||||
delete option enabled. If the user has selected a single wall, check to
|
||||
see if the wall has any Additions that are walls. If so, merges these
|
||||
additions to the wall, deleting the additions.
|
||||
"""
|
||||
|
||||
walls = FreeCADGui.Selection.getSelection()
|
||||
if len(walls) == 1:
|
||||
if Draft.getType(walls[0]) == "Wall":
|
||||
ostr = "FreeCAD.ActiveDocument."+ walls[0].Name
|
||||
ok = False
|
||||
for o in walls[0].Additions:
|
||||
if Draft.getType(o) == "Wall":
|
||||
ostr += ",FreeCAD.ActiveDocument." + o.Name
|
||||
ok = True
|
||||
if ok:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Merge Wall"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.joinWalls(["+ostr+"],delete=True)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
return
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(translate("Arch","The selected wall contains no subwall to merge"))
|
||||
return
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(translate("Arch","Please select only wall objects"))
|
||||
return
|
||||
for w in walls:
|
||||
if Draft.getType(w) != "Wall":
|
||||
FreeCAD.Console.PrintMessage(translate("Arch","Please select only wall objects"))
|
||||
return
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Merge Walls"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.joinWalls(FreeCADGui.Selection.getSelection(),delete=True)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
|
||||
class _Wall(ArchComponent.Component):
|
||||
"""The Wall object.
|
||||
|
||||
@@ -1061,7 +476,7 @@ class _Wall(ArchComponent.Component):
|
||||
if Draft.getType(obj.Base) == "Wire":
|
||||
#print "modifying p2"
|
||||
obj.Base.End = p2
|
||||
elif Draft.getType(obj.Base) in ["Sketcher::SketchObject", "ArchSketch"]:
|
||||
elif Draft.getType(obj.Base) == "Sketcher::SketchObject":
|
||||
try:
|
||||
obj.Base.recompute() # Fix for the 'GeoId index out range' error.
|
||||
obj.Base.movePoint(0, 2, obj.Base.Placement.inverse().multVec(p2))
|
||||
@@ -1211,8 +626,11 @@ class _Wall(ArchComponent.Component):
|
||||
if not height:
|
||||
return None
|
||||
if obj.Normal == Vector(0,0,0):
|
||||
import DraftGeomUtils
|
||||
normal = DraftGeomUtils.get_shape_normal(obj.Base.Shape)
|
||||
if obj.Base:
|
||||
baseshape = obj.Base.Shape
|
||||
else:
|
||||
baseshape = Part.makeLine((0,0,0),(length,0,0))
|
||||
normal = DraftGeomUtils.get_shape_normal(baseshape)
|
||||
if normal == None:
|
||||
normal = Vector(0,0,1)
|
||||
else:
|
||||
@@ -1772,7 +1190,3 @@ class _ViewProviderWall(ArchComponent.ViewProviderComponent):
|
||||
elif obj.Align == "Right":
|
||||
obj.Align = "Left"
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Wall',_CommandWall())
|
||||
FreeCADGui.addCommand('Arch_MergeWalls',_CommandMergeWalls())
|
||||
@@ -34,7 +34,7 @@ from draftutils.messages import _wrn
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
from PySide import QtCore, QtGui, QtSvgWidgets
|
||||
from PySide import QtCore, QtGui, QtSvg
|
||||
from draftutils.translate import translate
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
import draftguitools.gui_trackers as DraftTrackers
|
||||
@@ -67,64 +67,7 @@ WindowOpeningModes = ["None","Arc 90","Arc 90 inv","Arc 45","Arc 45 inv","Arc 18
|
||||
WindowPresets = ArchWindowPresets.WindowPresets
|
||||
|
||||
|
||||
def makeWindow(baseobj=None,width=None,height=None,parts=None,name=None):
|
||||
|
||||
'''makeWindow(baseobj,[width,height,parts,name]): creates a window based on the
|
||||
given base 2D object (sketch or draft).'''
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
FreeCAD.Console.PrintError("No active document. Aborting\n")
|
||||
return
|
||||
if baseobj:
|
||||
if Draft.getType(baseobj) == "Window":
|
||||
obj = Draft.clone(baseobj)
|
||||
return obj
|
||||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Window")
|
||||
_Window(obj)
|
||||
if name:
|
||||
obj.Label = name
|
||||
else:
|
||||
obj.Label = translate("Arch","Window")
|
||||
if FreeCAD.GuiUp:
|
||||
_ViewProviderWindow(obj.ViewObject)
|
||||
if width:
|
||||
obj.Width = width
|
||||
if height:
|
||||
obj.Height = height
|
||||
if baseobj:
|
||||
obj.Normal = baseobj.Placement.Rotation.multVec(FreeCAD.Vector(0,0,-1))
|
||||
obj.Base = baseobj
|
||||
if parts is not None:
|
||||
obj.WindowParts = parts
|
||||
else:
|
||||
if baseobj:
|
||||
if baseobj.getLinkedObject().isDerivedFrom("Part::Part2DObject"):
|
||||
# create default component
|
||||
if baseobj.Shape.Wires:
|
||||
tp = "Frame"
|
||||
if len(baseobj.Shape.Wires) == 1:
|
||||
tp = "Solid panel"
|
||||
i = 0
|
||||
ws = ''
|
||||
for w in baseobj.Shape.Wires:
|
||||
if w.isClosed():
|
||||
if ws: ws += ","
|
||||
ws += "Wire" + str(i)
|
||||
i += 1
|
||||
obj.WindowParts = ["Default",tp,ws,"1","0"]
|
||||
else:
|
||||
# bind properties from base obj if existing
|
||||
for prop in ["Height","Width","Subvolume","Tag","Description","Material"]:
|
||||
for p in baseobj.PropertiesList:
|
||||
if (p == prop) or p.endswith("_"+prop):
|
||||
obj.setExpression(prop, baseobj.Name+"."+p)
|
||||
|
||||
if obj.Base and FreeCAD.GuiUp:
|
||||
obj.Base.ViewObject.DisplayMode = "Wireframe"
|
||||
obj.Base.ViewObject.hide()
|
||||
from DraftGui import todo
|
||||
todo.delay(recolorize,[obj.Document.Name,obj.Name])
|
||||
return obj
|
||||
|
||||
def recolorize(attr): # names is [docname,objname]
|
||||
|
||||
@@ -147,416 +90,6 @@ def recolorize(attr): # names is [docname,objname]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class _CommandWindow:
|
||||
|
||||
"the Arch Window command definition"
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.doormode = False
|
||||
|
||||
def GetResources(self):
|
||||
|
||||
return {'Pixmap' : 'Arch_Window',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Arch_Window","Window"),
|
||||
'Accel': "W, N",
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Arch_Window","Creates a window object from a selected object (wire, rectangle or sketch)")}
|
||||
|
||||
def IsActive(self):
|
||||
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
def Activated(self):
|
||||
|
||||
self.sel = FreeCADGui.Selection.getSelection()
|
||||
self.W1 = params.get_param_arch("WindowW1") # thickness of the fixed frame
|
||||
if self.doormode:
|
||||
self.Width = params.get_param_arch("DoorWidth")
|
||||
self.Height = params.get_param_arch("DoorHeight")
|
||||
else:
|
||||
self.Width = params.get_param_arch("WindowWidth")
|
||||
self.Height = params.get_param_arch("WindowHeight")
|
||||
self.RemoveExternal = params.get_param_arch("archRemoveExternal")
|
||||
self.Preset = 0
|
||||
self.LibraryPreset = 0
|
||||
self.Sill = 0
|
||||
self.Include = True
|
||||
self.baseFace = None
|
||||
self.wparams = ["Width","Height","H1","H2","H3","W1","W2","O1","O2"]
|
||||
self.wp = None
|
||||
|
||||
# autobuild mode
|
||||
if FreeCADGui.Selection.getSelectionEx():
|
||||
FreeCADGui.draftToolBar.offUi()
|
||||
obj = self.sel[0]
|
||||
if hasattr(obj,'Shape'):
|
||||
if obj.Shape.Wires and (not obj.Shape.Solids) and (not obj.Shape.Shells):
|
||||
FreeCADGui.Control.closeDialog()
|
||||
host = None
|
||||
if hasattr(obj,"AttachmentSupport"):
|
||||
if obj.AttachmentSupport:
|
||||
if isinstance(obj.AttachmentSupport,tuple):
|
||||
host = obj.AttachmentSupport[0]
|
||||
elif isinstance(obj.AttachmentSupport,list):
|
||||
host = obj.AttachmentSupport[0][0]
|
||||
else:
|
||||
host = obj.AttachmentSupport
|
||||
obj.AttachmentSupport = None # remove
|
||||
elif Draft.isClone(obj,"Window"):
|
||||
if obj.Objects[0].Inlist:
|
||||
host = obj.Objects[0].Inlist[0]
|
||||
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Window"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("win = Arch.makeWindow(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
if host and self.Include:
|
||||
FreeCADGui.doCommand("win.Hosts = [FreeCAD.ActiveDocument."+host.Name+"]")
|
||||
siblings = host.Proxy.getSiblings(host)
|
||||
sibs = [host]
|
||||
for sibling in siblings:
|
||||
if not sibling in sibs:
|
||||
sibs.append(sibling)
|
||||
FreeCADGui.doCommand("win.Hosts = win.Hosts+[FreeCAD.ActiveDocument."+sibling.Name+"]")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
# Try to detect an object to use as a window type - TODO we must make this safer
|
||||
|
||||
elif obj.Shape.Solids and (Draft.getType(obj) not in ["Wall","Structure","Roof"]):
|
||||
# we consider the selected object as a type
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Window"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeWindow(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
# interactive mode
|
||||
import WorkingPlane
|
||||
self.wp = WorkingPlane.get_working_plane()
|
||||
|
||||
self.tracker = DraftTrackers.boxTracker()
|
||||
self.tracker.length(self.Width)
|
||||
self.tracker.width(self.W1)
|
||||
self.tracker.height(self.Height)
|
||||
self.tracker.on()
|
||||
FreeCAD.Console.PrintMessage(translate("Arch","Choose a face on an existing object or select a preset")+"\n")
|
||||
FreeCADGui.Snapper.getPoint(callback=self.getPoint,movecallback=self.update,extradlg=self.taskbox())
|
||||
#FreeCADGui.Snapper.setSelectMode(True)
|
||||
|
||||
def has_width_and_height_constraint(self, sketch):
|
||||
width_found = False
|
||||
height_found = False
|
||||
|
||||
for constr in sketch.Constraints:
|
||||
if constr.Name == "Width":
|
||||
width_found = True
|
||||
elif constr.Name == "Height":
|
||||
height_found = True
|
||||
elif width_found and height_found:
|
||||
break
|
||||
|
||||
return (width_found and height_found)
|
||||
|
||||
def getPoint(self,point=None,obj=None):
|
||||
|
||||
"this function is called by the snapper when it has a 3D point"
|
||||
|
||||
self.tracker.finalize()
|
||||
if point is None:
|
||||
return
|
||||
# if something was selected, override the underlying object
|
||||
if self.sel:
|
||||
obj = self.sel[0]
|
||||
point = point.add(FreeCAD.Vector(0,0,self.Sill))
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Window"))
|
||||
|
||||
FreeCADGui.doCommand("import math, FreeCAD, Arch, DraftGeomUtils, WorkingPlane")
|
||||
FreeCADGui.doCommand("wp = WorkingPlane.get_working_plane()")
|
||||
|
||||
if self.baseFace is not None:
|
||||
FreeCADGui.doCommand("face = FreeCAD.ActiveDocument." + self.baseFace[0].Name + ".Shape.Faces[" + str(self.baseFace[1]) + "]")
|
||||
FreeCADGui.doCommand("pl = DraftGeomUtils.placement_from_face(face, vec_z = wp.axis)")
|
||||
else:
|
||||
FreeCADGui.doCommand("pl = FreeCAD.Placement()")
|
||||
FreeCADGui.doCommand("pl.Rotation = FreeCAD.Rotation(wp.u, wp.axis, -wp.v, 'XZY')")
|
||||
|
||||
FreeCADGui.doCommand("pl.Base = FreeCAD.Vector(" + str(point.x) + ", " + str(point.y) + ", " + str(point.z) + ")")
|
||||
|
||||
if self.Preset >= len(WindowPresets):
|
||||
# library object
|
||||
col = FreeCAD.ActiveDocument.Objects
|
||||
path = self.librarypresets[self.Preset - len(WindowPresets)][1]
|
||||
FreeCADGui.doCommand("FreeCADGui.ActiveDocument.mergeProject('" + path + "')")
|
||||
# find the latest added window
|
||||
nol = FreeCAD.ActiveDocument.Objects
|
||||
for o in nol[len(col):]:
|
||||
if Draft.getType(o) == "Window":
|
||||
if Draft.getType(o.Base) != "Sketcher::SketchObject":
|
||||
_wrn(translate("Arch", "Window not based on sketch. Window not aligned or resized."))
|
||||
self.Include = False
|
||||
break
|
||||
FreeCADGui.doCommand("win = FreeCAD.ActiveDocument.getObject('" + o.Name + "')")
|
||||
FreeCADGui.doCommand("win.Base.Placement = pl")
|
||||
FreeCADGui.doCommand("win.Normal = pl.Rotation.multVec(FreeCAD.Vector(0, 0, -1))")
|
||||
FreeCADGui.doCommand("win.Width = " + str(self.Width))
|
||||
FreeCADGui.doCommand("win.Height = " + str(self.Height))
|
||||
FreeCADGui.doCommand("win.Base.recompute()")
|
||||
if not self.has_width_and_height_constraint(o.Base):
|
||||
_wrn(translate("Arch", "No Width and/or Height constraint in window sketch. Window not resized."))
|
||||
break
|
||||
else:
|
||||
_wrn(translate("Arch", "No window found. Cannot continue."))
|
||||
self.Include = False
|
||||
|
||||
else:
|
||||
# preset
|
||||
wp = ""
|
||||
for p in self.wparams:
|
||||
wp += p.lower() + "=" + str(getattr(self,p)) + ", "
|
||||
FreeCADGui.doCommand("win = Arch.makeWindowPreset('" + WindowPresets[self.Preset] + "', " + wp + "placement=pl)")
|
||||
|
||||
if self.Include:
|
||||
host = None
|
||||
if self.baseFace is not None:
|
||||
host = self.baseFace[0]
|
||||
elif obj:
|
||||
host = obj
|
||||
if Draft.getType(host) in AllowedHosts:
|
||||
FreeCADGui.doCommand("win.Hosts = [FreeCAD.ActiveDocument." + host.Name + "]")
|
||||
siblings = host.Proxy.getSiblings(host)
|
||||
for sibling in siblings:
|
||||
FreeCADGui.doCommand("win.Hosts = win.Hosts + [FreeCAD.ActiveDocument." + sibling.Name + "]")
|
||||
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
def update(self,point,info):
|
||||
|
||||
"this function is called by the Snapper when the mouse is moved"
|
||||
|
||||
delta = FreeCAD.Vector(self.Width/2,self.W1/2,self.Height/2)
|
||||
delta = delta.add(FreeCAD.Vector(0,0,self.Sill))
|
||||
|
||||
if self.baseFace is None:
|
||||
rot = FreeCAD.Rotation(self.wp.u,self.wp.v,-self.wp.axis,"XZY")
|
||||
self.tracker.setRotation(rot)
|
||||
if info:
|
||||
if "Face" in info['Component']:
|
||||
import DraftGeomUtils
|
||||
o = FreeCAD.ActiveDocument.getObject(info['Object'])
|
||||
self.baseFace = [o,int(info['Component'][4:])-1]
|
||||
#print("switching to ",o.Label," face ",self.baseFace[1])
|
||||
f = o.Shape.Faces[self.baseFace[1]]
|
||||
p = DraftGeomUtils.placement_from_face(f,vec_z=self.wp.axis,rotated=True)
|
||||
rot = p.Rotation
|
||||
self.tracker.setRotation(rot)
|
||||
r = self.tracker.trans.rotation.getValue().getValue()
|
||||
if r != (0,0,0,1):
|
||||
delta = FreeCAD.Rotation(r[0],r[1],r[2],r[3]).multVec(FreeCAD.Vector(delta.x,-delta.y,-delta.z))
|
||||
self.tracker.pos(point.add(delta))
|
||||
|
||||
def taskbox(self):
|
||||
|
||||
"sets up a taskbox widget"
|
||||
|
||||
w = QtGui.QWidget()
|
||||
ui = FreeCADGui.UiLoader()
|
||||
w.setWindowTitle(translate("Arch","Window options"))
|
||||
grid = QtGui.QGridLayout(w)
|
||||
|
||||
# include box
|
||||
include = QtGui.QCheckBox(translate("Arch","Auto include in host object"))
|
||||
include.setChecked(True)
|
||||
grid.addWidget(include,0,0,1,2)
|
||||
QtCore.QObject.connect(include,QtCore.SIGNAL("stateChanged(int)"),self.setInclude)
|
||||
|
||||
# sill height
|
||||
labels = QtGui.QLabel(translate("Arch","Sill height"))
|
||||
values = ui.createWidget("Gui::InputField")
|
||||
grid.addWidget(labels,1,0,1,1)
|
||||
grid.addWidget(values,1,1,1,1)
|
||||
QtCore.QObject.connect(values,QtCore.SIGNAL("valueChanged(double)"),self.setSill)
|
||||
|
||||
# check for Parts library and Arch presets
|
||||
|
||||
# because of the use of FreeCADGui.doCommand() backslashes in the
|
||||
# paths in librarypresets need to be double escaped "\\\\", so let's
|
||||
# use forward slashes instead...
|
||||
self.librarypresets = []
|
||||
librarypath = FreeCAD.ParamGet("User parameter:Plugins/parts_library").GetString("destination", "")
|
||||
# librarypath should have only forward slashes already, but let's use replace() anyway just to be sure:
|
||||
librarypath = librarypath.replace("\\", "/") + "/Architectural Parts"
|
||||
presetdir = FreeCAD.getUserAppDataDir().replace("\\", "/") + "/Arch"
|
||||
for path in [librarypath, presetdir]:
|
||||
if os.path.isdir(path):
|
||||
for wtype in ["Windows", "Doors"]:
|
||||
wdir = path + "/" + wtype
|
||||
if os.path.isdir(wdir):
|
||||
for subtype in os.listdir(wdir):
|
||||
subdir = wdir + "/" + subtype
|
||||
if os.path.isdir(subdir):
|
||||
for subfile in os.listdir(subdir):
|
||||
if (os.path.isfile(subdir + "/" + subfile)
|
||||
and subfile.lower().endswith(".fcstd")):
|
||||
self.librarypresets.append([wtype + " - " + subtype + " - " + subfile[:-6],
|
||||
subdir + "/" + subfile])
|
||||
|
||||
# presets box
|
||||
labelp = QtGui.QLabel(translate("Arch","Preset"))
|
||||
valuep = QtGui.QComboBox()
|
||||
valuep.setMinimumContentsLength(6)
|
||||
valuep.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
|
||||
valuep.addItems(WindowPresets)
|
||||
valuep.setCurrentIndex(self.Preset)
|
||||
grid.addWidget(labelp,2,0,1,1)
|
||||
grid.addWidget(valuep,2,1,1,1)
|
||||
QtCore.QObject.connect(valuep,QtCore.SIGNAL("currentIndexChanged(int)"),self.setPreset)
|
||||
for it in self.librarypresets:
|
||||
valuep.addItem(it[0])
|
||||
|
||||
# image display
|
||||
self.pic = QtGui.QLabel()
|
||||
grid.addWidget(self.pic,3,0,1,2)
|
||||
self.pic.setFixedHeight(128)
|
||||
self.pic.hide()
|
||||
|
||||
# SVG display
|
||||
self.im = QtSvgWidgets.QSvgWidget(":/ui/ParametersWindowFixed.svg")
|
||||
self.im.setMaximumWidth(200)
|
||||
self.im.setMinimumHeight(120)
|
||||
grid.addWidget(self.im,4,0,1,2)
|
||||
#self.im.hide()
|
||||
|
||||
# parameters
|
||||
i = 5
|
||||
for param in self.wparams:
|
||||
lab = QtGui.QLabel(translate("Arch",param))
|
||||
setattr(self,"val"+param,ui.createWidget("Gui::InputField"))
|
||||
wid = getattr(self,"val"+param)
|
||||
if param == "W1":
|
||||
wid.setText(FreeCAD.Units.Quantity(self.W1,FreeCAD.Units.Length).UserString)
|
||||
elif param == "Width":
|
||||
wid.setText(FreeCAD.Units.Quantity(self.Width,FreeCAD.Units.Length).UserString)
|
||||
elif param == "Height":
|
||||
wid.setText(FreeCAD.Units.Quantity(self.Height,FreeCAD.Units.Length).UserString)
|
||||
else:
|
||||
n = params.get_param_arch("Window"+param)
|
||||
wid.setText(FreeCAD.Units.Quantity(n,FreeCAD.Units.Length).UserString)
|
||||
setattr(self,param,n)
|
||||
grid.addWidget(lab,i,0,1,1)
|
||||
grid.addWidget(wid,i,1,1,1)
|
||||
i += 1
|
||||
valueChanged = self.getValueChanged(param)
|
||||
FreeCAD.wid = wid
|
||||
QtCore.QObject.connect(getattr(self,"val"+param),QtCore.SIGNAL("valueChanged(double)"), valueChanged)
|
||||
|
||||
# restore saved states
|
||||
if self.doormode:
|
||||
i = params.get_param_arch("DoorPreset")
|
||||
d = params.get_param_arch("DoorSill")
|
||||
else:
|
||||
i = params.get_param_arch("WindowPreset")
|
||||
d = params.get_param_arch("WindowSill")
|
||||
if i < valuep.count():
|
||||
valuep.setCurrentIndex(i)
|
||||
values.setText(FreeCAD.Units.Quantity(d,FreeCAD.Units.Length).UserString)
|
||||
|
||||
return w
|
||||
|
||||
def getValueChanged(self,p):
|
||||
|
||||
return lambda d : self.setParams(p, d)
|
||||
|
||||
def setSill(self,d):
|
||||
|
||||
self.Sill = d
|
||||
if self.doormode:
|
||||
params.set_param_arch("DoorSill",d)
|
||||
else:
|
||||
params.set_param_arch("WindowSill",d)
|
||||
|
||||
def setInclude(self,i):
|
||||
|
||||
self.Include = bool(i)
|
||||
|
||||
def setParams(self,param,d):
|
||||
|
||||
setattr(self,param,d)
|
||||
self.tracker.length(self.Width)
|
||||
self.tracker.height(self.Height)
|
||||
self.tracker.width(self.W1)
|
||||
prefix = "Door" if self.doormode and param in ("Width","Height") else "Window"
|
||||
params.set_param_arch(prefix+param,d)
|
||||
|
||||
def setPreset(self,i):
|
||||
|
||||
self.Preset = i
|
||||
if self.doormode:
|
||||
params.set_param_arch("DoorPreset",i)
|
||||
else:
|
||||
params.set_param_arch("WindowPreset",i)
|
||||
if i >= 0:
|
||||
FreeCADGui.Snapper.setSelectMode(False)
|
||||
self.tracker.length(self.Width)
|
||||
self.tracker.height(self.Height)
|
||||
self.tracker.width(self.W1)
|
||||
self.tracker.on()
|
||||
self.pic.hide()
|
||||
self.im.show()
|
||||
if i == 0:
|
||||
self.im.load(":/ui/ParametersWindowFixed.svg")
|
||||
elif i in [1,8]:
|
||||
self.im.load(":/ui/ParametersWindowSimple.svg")
|
||||
elif i in [2,4,7]:
|
||||
self.im.load(":/ui/ParametersWindowDouble.svg")
|
||||
elif i == 3:
|
||||
self.im.load(":/ui/ParametersWindowStash.svg")
|
||||
elif i == 5:
|
||||
self.im.load(":/ui/ParametersDoorSimple.svg")
|
||||
elif i == 6:
|
||||
self.im.load(":/ui/ParametersDoorGlass.svg")
|
||||
elif i == 9:
|
||||
self.im.load(":/ui/ParametersOpening.svg")
|
||||
else:
|
||||
# From Library
|
||||
self.im.hide()
|
||||
path = self.librarypresets[i-len(WindowPresets)][1]
|
||||
if path.lower().endswith(".fcstd"):
|
||||
try:
|
||||
import tempfile
|
||||
import zipfile
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
zfile = zipfile.ZipFile(path)
|
||||
files = zfile.namelist()
|
||||
# check for meta-file if it's really a FreeCAD document
|
||||
if files[0] == "Document.xml":
|
||||
image="thumbnails/Thumbnail.png"
|
||||
if image in files:
|
||||
image = zfile.read(image)
|
||||
thumbfile = tempfile.mkstemp(suffix='.png')[1]
|
||||
thumb = open(thumbfile,"wb")
|
||||
thumb.write(image)
|
||||
thumb.close()
|
||||
im = QtGui.QPixmap(thumbfile)
|
||||
self.pic.setPixmap(im)
|
||||
self.pic.show()
|
||||
#for param in self.wparams:
|
||||
# getattr(self,"val"+param).setEnabled(True)
|
||||
else:
|
||||
FreeCADGui.Snapper.setSelectMode(True)
|
||||
self.tracker.off()
|
||||
self.im.hide()
|
||||
for param in self.wparams:
|
||||
getattr(self,"val"+param).setEnabled(False)
|
||||
|
||||
|
||||
class _Window(ArchComponent.Component):
|
||||
|
||||
"The Window object"
|
||||
@@ -1841,5 +1374,4 @@ class _ArchWindowTaskPanel:
|
||||
self.obj.ViewObject.Proxy.invertHinge()
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Window',_CommandWindow())
|
||||
|
||||
@@ -501,14 +501,14 @@ def makeWindowPreset(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2,placement=None
|
||||
return (s,wp)
|
||||
|
||||
if windowtype in WindowPresets:
|
||||
import ArchWindow
|
||||
import Arch
|
||||
default = makeSketch(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
if default:
|
||||
if placement:
|
||||
default[0].Placement = placement
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
obj = ArchWindow.makeWindow(default[0],width,height,default[1])
|
||||
obj = Arch.makeWindow(default[0],width,height,default[1])
|
||||
obj.Preset = WindowPresets.index(windowtype)+1
|
||||
obj.Frame = w2
|
||||
obj.Offset = o1
|
||||
103
src/Mod/BIM/BimSelect.py
Normal file
@@ -0,0 +1,103 @@
|
||||
import FreeCAD
|
||||
|
||||
|
||||
class CyclicSelectionObserver:
|
||||
def addSelection(self, document, object, element, position):
|
||||
import FreeCADGui
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
return
|
||||
if not hasattr(FreeCAD, "CyclicSelectionObserver"):
|
||||
return
|
||||
FreeCADGui.Selection.removeSelection(FreeCAD.ActiveDocument.getObject(object))
|
||||
FreeCADGui.Selection.removeObserver(FreeCAD.CyclicSelectionObserver)
|
||||
del FreeCAD.CyclicSelectionObserver
|
||||
preselection = FreeCADGui.Selection.getPreselection()
|
||||
FreeCADGui.Selection.addSelection(
|
||||
FreeCAD.ActiveDocument.getObject(preselection.Object.Name),
|
||||
preselection.SubElementNames[0],
|
||||
)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class CyclicObjectSelector:
|
||||
def __init__(self):
|
||||
self.selectableObjects = []
|
||||
self.objectIndex = 0
|
||||
|
||||
def selectObject(self, event_callback):
|
||||
import FreeCADGui
|
||||
from pivy import coin
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
return
|
||||
event = event_callback.getEvent()
|
||||
|
||||
if (
|
||||
event.getState() != coin.SoMouseButtonEvent.DOWN
|
||||
or not self.selectableObjects
|
||||
):
|
||||
return
|
||||
|
||||
pos = event.getPosition().getValue()
|
||||
element_list = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo(
|
||||
(int(pos[0]), int(pos[1]))
|
||||
)
|
||||
|
||||
if not element_list:
|
||||
self.selectableObjects = []
|
||||
if hasattr(FreeCAD, "CyclicSelectionObserver"):
|
||||
FreeCADGui.Selection.removeObserver(FreeCAD.CyclicSelectionObserver)
|
||||
del FreeCAD.CyclicSelectionObserver
|
||||
return
|
||||
|
||||
FreeCAD.CyclicSelectionObserver = CyclicSelectionObserver()
|
||||
FreeCADGui.Selection.addObserver(FreeCAD.CyclicSelectionObserver)
|
||||
|
||||
def cycleSelectableObjects(self, event_callback):
|
||||
import FreeCADGui
|
||||
|
||||
if not FreeCAD.ActiveDocument:
|
||||
return
|
||||
event = event_callback.getEvent()
|
||||
|
||||
if not event.isKeyPressEvent(event, event.TAB):
|
||||
return
|
||||
|
||||
pos = event.getPosition().getValue()
|
||||
selectableObjects = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo(
|
||||
(int(pos[0]), int(pos[1]))
|
||||
)
|
||||
|
||||
if not selectableObjects:
|
||||
return
|
||||
|
||||
if self.selectableObjects != selectableObjects:
|
||||
self.selectableObjects = selectableObjects
|
||||
self.objectIndex = 0
|
||||
elif self.objectIndex < len(self.selectableObjects) - 1:
|
||||
self.objectIndex += 1
|
||||
else:
|
||||
self.objectIndex = 0
|
||||
object_name = self.selectableObjects[self.objectIndex]["Object"]
|
||||
subelement_name = self.selectableObjects[self.objectIndex]["Component"]
|
||||
FreeCADGui.getMainWindow().showMessage(
|
||||
"Cycle preselected (TAB): {} - {}".format(object_name, subelement_name), 0
|
||||
)
|
||||
FreeCADGui.Selection.setPreselection(
|
||||
FreeCAD.ActiveDocument.getObject(object_name), subelement_name
|
||||
)
|
||||
|
||||
|
||||
class Setup:
|
||||
def slotActivateDocument(self, doc):
|
||||
from pivy import coin
|
||||
|
||||
cos = CyclicObjectSelector()
|
||||
if doc and doc.ActiveView and hasattr(doc.ActiveView, "getSceneGraph"):
|
||||
self.callback = doc.ActiveView.addEventCallbackPivy(
|
||||
coin.SoMouseButtonEvent.getClassTypeId(), cos.selectObject
|
||||
)
|
||||
self.callback = doc.ActiveView.addEventCallbackPivy(
|
||||
coin.SoKeyboardEvent.getClassTypeId(), cos.cycleSelectableObjects
|
||||
)
|
||||
225
src/Mod/BIM/BimStatusBar.py
Normal file
@@ -0,0 +1,225 @@
|
||||
# -*- coding: utf8 -*-
|
||||
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2017 Yorik van Havre <yorik@uncreated.net> *
|
||||
# * *
|
||||
# * 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 *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
"""This module contains FreeCAD commands for the BIM workbench"""
|
||||
|
||||
import os
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
|
||||
QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
|
||||
# Status bar buttons
|
||||
|
||||
def setStatusIcons(show=True):
|
||||
"shows or hides the BIM icons in the status bar"
|
||||
|
||||
import FreeCADGui
|
||||
from PySide import QtCore, QtGui
|
||||
|
||||
nudgeLabelsI = [
|
||||
translate("BIM", "Custom..."),
|
||||
'1/16"',
|
||||
'1/8"',
|
||||
'1/4"',
|
||||
'1"',
|
||||
'6"',
|
||||
"1'",
|
||||
translate("BIM", "Auto"),
|
||||
]
|
||||
nudgeLabelsM = [
|
||||
translate("BIM", "Custom..."),
|
||||
"1 mm",
|
||||
"5 mm",
|
||||
"1 cm",
|
||||
"5 cm",
|
||||
"10 cm",
|
||||
"50 cm",
|
||||
translate("BIM", "Auto"),
|
||||
]
|
||||
|
||||
def toggle(state):
|
||||
FreeCADGui.runCommand("BIM_TogglePanels")
|
||||
|
||||
def toggleBimViews(state):
|
||||
FreeCADGui.runCommand("BIM_Views")
|
||||
|
||||
def toggleBackground(state):
|
||||
FreeCADGui.runCommand("BIM_Background")
|
||||
|
||||
def setNudge(action):
|
||||
utext = action.text().replace("&", "")
|
||||
if utext == nudgeLabelsM[0]:
|
||||
# load dialog
|
||||
form = FreeCADGui.PySideUic.loadUi(
|
||||
os.path.join(os.path.dirname(__file__), "dialogNudgeValue.ui")
|
||||
)
|
||||
# center the dialog over FreeCAD window
|
||||
mw = FreeCADGui.getMainWindow()
|
||||
form.move(
|
||||
mw.frameGeometry().topLeft() + mw.rect().center() - form.rect().center()
|
||||
)
|
||||
result = form.exec_()
|
||||
if not result:
|
||||
return
|
||||
utext = form.inputField.text()
|
||||
action.parent().parent().parent().setText(utext)
|
||||
|
||||
def toggleContextMenu(point):
|
||||
# DISABLED - TODO need to find a way to add a context menu to a QAction...
|
||||
FreeCADGui.BimToggleMenu = QtGui.QMenu()
|
||||
for t in ["Report view", "Python console", "Selection view", "Combo View"]:
|
||||
a = QtGui.QAction(t)
|
||||
# a.setCheckable(True)
|
||||
# a.setChecked(FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM").GetBool("toggle"+t.replace(" ",""),True))
|
||||
FreeCADGui.BimToggleMenu.addAction(a)
|
||||
pos = FreeCADGui.getMainWindow().cursor().pos()
|
||||
FreeCADGui.BimToggleMenu.triggered.connect(toggleSaveSettings)
|
||||
# QtCore.QObject.connect(FreeCADGui.BimToggleMenu,QtCore.SIGNAL("triggered(QAction *)"),toggleSaveSettings)
|
||||
FreeCADGui.BimToggleMenu.popup(pos)
|
||||
|
||||
def toggleSaveSettings(action):
|
||||
t = action.text()
|
||||
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM").SetBool(
|
||||
"toggle" + t.replace(" ", ""), action.isChecked()
|
||||
)
|
||||
if hasattr(FreeCADGui, "BimToggleMenu"):
|
||||
del FreeCADGui.BimToggleMenu
|
||||
|
||||
# main code
|
||||
|
||||
mw = FreeCADGui.getMainWindow()
|
||||
if mw:
|
||||
st = mw.statusBar()
|
||||
statuswidget = st.findChild(QtGui.QToolBar, "BIMStatusWidget")
|
||||
if show:
|
||||
if statuswidget:
|
||||
statuswidget.show()
|
||||
else:
|
||||
statuswidget = QtGui.QToolBar()
|
||||
statuswidget.setObjectName("BIMStatusWidget")
|
||||
s = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/General").GetInt("ToolbarIconSize", 24)
|
||||
statuswidget.setIconSize(QtCore.QSize(s,s))
|
||||
st.insertPermanentWidget(2, statuswidget)
|
||||
|
||||
# report panels toggle button
|
||||
togglebutton = QtGui.QAction()
|
||||
togglemenu = QtGui.QMenu()
|
||||
for t in ["Toggle", "Report view", "Python console", "Selection view", "Combo View"]:
|
||||
a = QtGui.QAction(t)
|
||||
togglemenu.addAction(a)
|
||||
togglemenu.triggered.connect(toggleSaveSettings)
|
||||
togglebutton.setIcon(QtGui.QIcon(":/icons/BIM_TogglePanels.svg"))
|
||||
togglebutton.setText("")
|
||||
togglebutton.setToolTip(
|
||||
translate("BIM", "Toggle report panels on/off (Ctrl+0)")
|
||||
)
|
||||
togglebutton.setCheckable(True)
|
||||
rv = mw.findChild(QtGui.QWidget, "Python console")
|
||||
if rv and rv.isVisible():
|
||||
togglebutton.setChecked(True)
|
||||
statuswidget.togglebutton = togglebutton
|
||||
#togglebutton.setMenu(togglemenu)
|
||||
togglebutton.triggered.connect(toggle)
|
||||
statuswidget.addAction(togglebutton)
|
||||
|
||||
# bim views widget toggle button
|
||||
from bimcommands import BimViews
|
||||
|
||||
bimviewsbutton = QtGui.QAction()
|
||||
bimviewsbutton.setIcon(QtGui.QIcon(":/icons/BIM_Views.svg"))
|
||||
|
||||
bimviewsbutton.setText("")
|
||||
bimviewsbutton.setToolTip(
|
||||
translate("BIM", "Toggle BIM views panel on/off (Ctrl+9)")
|
||||
)
|
||||
bimviewsbutton.setCheckable(True)
|
||||
if BimViews.findWidget():
|
||||
bimviewsbutton.setChecked(True)
|
||||
statuswidget.bimviewsbutton = bimviewsbutton
|
||||
bimviewsbutton.triggered.connect(toggleBimViews)
|
||||
statuswidget.addAction(bimviewsbutton)
|
||||
|
||||
# background toggle button
|
||||
bgbutton = QtGui.QAction()
|
||||
#bwidth = bgbutton.fontMetrics().boundingRect("AAAA").width()
|
||||
#bgbutton.setMaximumWidth(bwidth)
|
||||
bgbutton.setIcon(QtGui.QIcon(":/icons/BIM_Background.svg"))
|
||||
bgbutton.setText("")
|
||||
bgbutton.setToolTip(
|
||||
translate(
|
||||
"BIM", "Toggle 3D view background between simple and gradient"
|
||||
)
|
||||
)
|
||||
statuswidget.bgbutton = bgbutton
|
||||
bgbutton.triggered.connect(toggleBackground)
|
||||
statuswidget.addAction(bgbutton)
|
||||
|
||||
# ifc widgets
|
||||
try:
|
||||
from nativeifc import ifc_status
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
ifc_status.set_status_widget(statuswidget)
|
||||
|
||||
# nudge button
|
||||
nudge = QtGui.QPushButton(nudgeLabelsM[-1])
|
||||
nudge.setIcon(
|
||||
QtGui.QIcon(":/icons/BIM_Nudge.svg"))
|
||||
nudge.setFlat(True)
|
||||
nudge.setToolTip(
|
||||
translate(
|
||||
"BIM",
|
||||
"The value of the nudge movement (rotation is always 45°)."
|
||||
"CTRL+arrows to move\nCTRL+, to rotate left"
|
||||
"CTRL+. to rotate right\nCTRL+PgUp to extend extrusion"
|
||||
"CTRL+PgDown to shrink extrusion"
|
||||
"CTRL+/ to switch between auto and manual mode",
|
||||
)
|
||||
)
|
||||
statuswidget.addWidget(nudge)
|
||||
statuswidget.nudge = nudge
|
||||
menu = QtGui.QMenu(nudge)
|
||||
gnudge = QtGui.QActionGroup(menu)
|
||||
for u in nudgeLabelsM:
|
||||
a = QtGui.QAction(gnudge)
|
||||
a.setText(u)
|
||||
menu.addAction(a)
|
||||
nudge.setMenu(menu)
|
||||
gnudge.triggered.connect(setNudge)
|
||||
statuswidget.nudgeLabelsI = nudgeLabelsI
|
||||
statuswidget.nudgeLabelsM = nudgeLabelsM
|
||||
statuswidget.show()
|
||||
|
||||
else:
|
||||
if statuswidget is None:
|
||||
# when switching workbenches, the toolbar sometimes "jumps"
|
||||
# out of the status bar to any other dock area...
|
||||
statuswidget = mw.findChild(QtGui.QToolBar, "BIMStatusWidget")
|
||||
if statuswidget:
|
||||
statuswidget.hide()
|
||||
statuswidget.toggleViewAction().setVisible(False)
|
||||
274
src/Mod/BIM/CMakeLists.txt
Normal file
@@ -0,0 +1,274 @@
|
||||
IF (BUILD_GUI)
|
||||
PYSIDE_WRAP_RC(Arch_QRC_SRCS Resources/Arch.qrc)
|
||||
ENDIF (BUILD_GUI)
|
||||
|
||||
SET(Arch_SRCS
|
||||
Init.py
|
||||
InitGui.py
|
||||
ArchComponent.py
|
||||
ArchIFC.py
|
||||
ArchIFCView.py
|
||||
ArchIFCSchema.py
|
||||
ArchProject.py
|
||||
ArchWall.py
|
||||
Arch.py
|
||||
ArchSite.py
|
||||
ArchStructure.py
|
||||
ArchCommands.py
|
||||
ArchSectionPlane.py
|
||||
ArchWindow.py
|
||||
ArchWindowPresets.py
|
||||
ArchAxis.py
|
||||
ArchAxisSystem.py
|
||||
ArchGrid.py
|
||||
ArchVRM.py
|
||||
ArchRoof.py
|
||||
ArchStairs.py
|
||||
ArchSpace.py
|
||||
ArchRebar.py
|
||||
TestArch.py
|
||||
ArchFrame.py
|
||||
ArchPanel.py
|
||||
ArchEquipment.py
|
||||
ArchCutPlane.py
|
||||
ArchMaterial.py
|
||||
ArchSchedule.py
|
||||
ArchProfile.py
|
||||
ArchPrecast.py
|
||||
ArchPipe.py
|
||||
ArchNesting.py
|
||||
ArchBuildingPart.py
|
||||
ArchReference.py
|
||||
ArchFence.py
|
||||
OfflineRenderingUtils.py
|
||||
ArchTruss.py
|
||||
ArchCurtainWall.py
|
||||
ArchSketchObject.py
|
||||
BimSelect.py
|
||||
BimStatusBar.py
|
||||
)
|
||||
|
||||
SET(importers_SRCS
|
||||
importers/__init__.py
|
||||
importers/importIFC.py
|
||||
importers/importIFClegacy.py
|
||||
importers/importIFCHelper.py
|
||||
importers/importIFCmulticore.py
|
||||
importers/importDAE.py
|
||||
importers/importOBJ.py
|
||||
importers/importWebGL.py
|
||||
importers/importJSON.py
|
||||
importers/importSH3D.py
|
||||
importers/import3DS.py
|
||||
importers/importSHP.py
|
||||
importers/importGBXML.py
|
||||
importers/exportIFCStructuralTools.py
|
||||
importers/exportIFC.py
|
||||
importers/exportIFCHelper.py
|
||||
)
|
||||
|
||||
SET(Dice3DS_SRCS
|
||||
Dice3DS/__init__.py
|
||||
Dice3DS/util.py
|
||||
Dice3DS/dom3ds.py
|
||||
)
|
||||
|
||||
SET(Arch_presets
|
||||
Presets/profiles.csv
|
||||
Presets/pset_definitions.csv
|
||||
Presets/ifc_products_IFC2X3.json
|
||||
Presets/ifc_products_IFC4.json
|
||||
Presets/ifc_types_IFC2X3.json
|
||||
Presets/ifc_types_IFC4.json
|
||||
Presets/ifc_contexts_IFC2X3.json
|
||||
Presets/ifc_contexts_IFC4.json
|
||||
)
|
||||
|
||||
SET(bimcommands_SRCS
|
||||
bimcommands/BimArchUtils.py
|
||||
bimcommands/BimAxis.py
|
||||
bimcommands/BimBackground.py
|
||||
bimcommands/BimBeam.py
|
||||
bimcommands/BimBox.py
|
||||
bimcommands/BimBuilder.py
|
||||
bimcommands/BimBuildingPart.py
|
||||
bimcommands/BimClassification.py
|
||||
bimcommands/BimClone.py
|
||||
bimcommands/BimColumn.py
|
||||
bimcommands/BimCommon.py
|
||||
bimcommands/BimCompound.py
|
||||
bimcommands/BimConvert.py
|
||||
bimcommands/BimCopy.py
|
||||
bimcommands/BimCurtainwall.py
|
||||
bimcommands/BimCutPlane.py
|
||||
bimcommands/BimCut.py
|
||||
bimcommands/BimDiff.py
|
||||
bimcommands/BimDimensions.py
|
||||
bimcommands/BimDoor.py
|
||||
bimcommands/BimEmptyTrash.py
|
||||
bimcommands/BimEquipment.py
|
||||
bimcommands/BimExamples.py
|
||||
bimcommands/BimExtrude.py
|
||||
bimcommands/BimFence.py
|
||||
bimcommands/BimFrame.py
|
||||
bimcommands/BimFuse.py
|
||||
bimcommands/BimGlue.py
|
||||
bimcommands/BimHelp.py
|
||||
bimcommands/BimIfcElements.py
|
||||
bimcommands/BimIfcExplorer.py
|
||||
bimcommands/BimIfcProperties.py
|
||||
bimcommands/BimIfcQuantities.py
|
||||
bimcommands/BimImagePlane.py
|
||||
bimcommands/BimLayers.py
|
||||
bimcommands/BimLeader.py
|
||||
bimcommands/BimLibrary.py
|
||||
bimcommands/BimMaterial.py
|
||||
bimcommands/BimMoveView.py
|
||||
bimcommands/BimNudge.py
|
||||
bimcommands/BimOffset.py
|
||||
bimcommands/BimPanel.py
|
||||
bimcommands/BimPipe.py
|
||||
bimcommands/BimPreflight.py
|
||||
bimcommands/BimProfile.py
|
||||
bimcommands/BimProjectManager.py
|
||||
bimcommands/BimProject.py
|
||||
bimcommands/BimRebar.py
|
||||
bimcommands/BimReextrude.py
|
||||
bimcommands/BimReference.py
|
||||
bimcommands/BimReorder.py
|
||||
bimcommands/BimResetCloneColors.py
|
||||
bimcommands/BimRewire.py
|
||||
bimcommands/BimRoof.py
|
||||
bimcommands/BimSchedule.py
|
||||
bimcommands/BimSectionPlane.py
|
||||
bimcommands/BimSetup.py
|
||||
bimcommands/BimShape2DView.py
|
||||
bimcommands/BimSimpleCopy.py
|
||||
bimcommands/BimSite.py
|
||||
bimcommands/BimSketch.py
|
||||
bimcommands/BimSlab.py
|
||||
bimcommands/BimSpace.py
|
||||
bimcommands/BimStairs.py
|
||||
bimcommands/BimTDPage.py
|
||||
bimcommands/BimTDView.py
|
||||
bimcommands/BimText.py
|
||||
bimcommands/BimTogglePanels.py
|
||||
bimcommands/BimTrash.py
|
||||
bimcommands/BimTruss.py
|
||||
bimcommands/BimTutorial.py
|
||||
bimcommands/BimUnclone.py
|
||||
bimcommands/BimUngroup.py
|
||||
bimcommands/BimViews.py
|
||||
bimcommands/BimWall.py
|
||||
bimcommands/BimWelcome.py
|
||||
bimcommands/BimWindow.py
|
||||
bimcommands/BimWindows.py
|
||||
bimcommands/BimWPCommands.py
|
||||
bimcommands/__init__.py
|
||||
)
|
||||
|
||||
SET(nativeifc_SRCS
|
||||
nativeifc/ifc_commands.py
|
||||
nativeifc/ifc_diff.py
|
||||
nativeifc/ifc_generator.py
|
||||
nativeifc/ifc_geometry.py
|
||||
nativeifc/ifc_import.py
|
||||
nativeifc/ifc_layers.py
|
||||
nativeifc/ifc_materials.py
|
||||
nativeifc/ifc_objects.py
|
||||
nativeifc/ifc_observer.py
|
||||
nativeifc/ifc_performance_test.py
|
||||
nativeifc/ifc_preferences.py
|
||||
nativeifc/ifc_psets.py
|
||||
nativeifc/ifc_selftest.py
|
||||
nativeifc/ifc_status.py
|
||||
nativeifc/ifc_tools.py
|
||||
nativeifc/ifc_tree.py
|
||||
nativeifc/ifc_viewproviders.py
|
||||
nativeifc/__init__.py
|
||||
nativeifc/ifc_openshell.py
|
||||
)
|
||||
|
||||
SOURCE_GROUP("" FILES ${Arch_SRCS})
|
||||
|
||||
SET(BIMGuiIcon_SVG
|
||||
Resources/icons/BIMWorkbench.svg
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(BIM ALL
|
||||
SOURCES ${Arch_SRCS}
|
||||
${Arch_QRC_SRCS}
|
||||
${Dice3DS_SRCS}
|
||||
${Arch_presets}
|
||||
${ArchGuiIcon_SVG}
|
||||
${importers_SRCS}
|
||||
${bimcommands_SRCS}
|
||||
${nativeifc_SRCS}
|
||||
${BIMGuiIcon_SVG}
|
||||
)
|
||||
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/Mod/BIM" ${Arch_SRCS})
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/Mod/BIM" ${Dice3DS_SRCS})
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/Mod/BIM" ${importers_SRCS})
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/Mod/BIM" ${bimcommands_SRCS})
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/Mod/BIM" ${nativeifc_SRCS})
|
||||
fc_copy_sources(BIM "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/BIM" ${BIMGuiIcon_SVG})
|
||||
|
||||
fc_target_copy_resource(BIM
|
||||
${CMAKE_SOURCE_DIR}/src/Mod/BIM
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/BIM
|
||||
${Arch_presets}
|
||||
)
|
||||
|
||||
IF (BUILD_GUI)
|
||||
fc_target_copy_resource(BIM
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}/Mod/BIM
|
||||
Arch_rc.py)
|
||||
ENDIF (BUILD_GUI)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${Arch_SRCS}
|
||||
${Arch_QRC_SRCS}
|
||||
DESTINATION Mod/BIM
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${Dice3DS_SRCS}
|
||||
DESTINATION Mod/BIM/Dice3DS
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${importers_SRCS}
|
||||
DESTINATION Mod/BIM/importers
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${bimcommands_SRCS}
|
||||
DESTINATION Mod/BIM/bimcommands
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${nativeifc_SRCS}
|
||||
DESTINATION Mod/BIM/nativeifc
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
DIRECTORY
|
||||
Presets
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_DATADIR}/Mod/BIM
|
||||
)
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${BIMGuiIcon_SVG}
|
||||
DESTINATION
|
||||
"${CMAKE_INSTALL_DATADIR}/Mod/BIM/Resources/icons"
|
||||
)
|
||||
|
||||
37
src/Mod/BIM/Init.py
Normal file
@@ -0,0 +1,37 @@
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2022 Yorik van Havre <yorik@uncreated.net> *
|
||||
# * *
|
||||
# * 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 *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
# add import/export types
|
||||
|
||||
FreeCAD.addExportType("Industry Foundation Classes (*.ifc)","importers.exportIFC")
|
||||
# FreeCAD.addImportType("Industry Foundation Classes (*.ifc)","importIFC")
|
||||
FreeCAD.addImportType("Industry Foundation Classes (*.ifc)", "nativeifc.ifc_import")
|
||||
FreeCAD.addExportType("Industry Foundation Classes - IFCJSON (*.ifcJSON)","importers.exportIFC")
|
||||
FreeCAD.addImportType("Wavefront OBJ - Arch module (*.obj *.OBJ)","importers.importOBJ")
|
||||
FreeCAD.addExportType("Wavefront OBJ - Arch module (*.obj)","importers.importOBJ")
|
||||
FreeCAD.addExportType("WebGL file (*.html)","importers.importWebGL")
|
||||
FreeCAD.addExportType("JavaScript Object Notation (*.json)","importers.importJSON")
|
||||
FreeCAD.addImportType("Collada (*.dae *.DAE)","importers.importDAE")
|
||||
FreeCAD.addExportType("Collada (*.dae)","importers.importDAE")
|
||||
FreeCAD.addImportType("3D Studio mesh (*.3ds *.3DS)","importers.import3DS")
|
||||
FreeCAD.addImportType("SweetHome3D XML export (*.zip *.ZIP)","importers.importSH3D")
|
||||
FreeCAD.addImportType("Shapefile (*.shp *.SHP)","importers.importSHP")
|
||||
675
src/Mod/BIM/InitGui.py
Normal file
@@ -0,0 +1,675 @@
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2017 Yorik van Havre <yorik@uncreated.net> *
|
||||
# * *
|
||||
# * 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 *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
"""The BIM workbench"""
|
||||
|
||||
import os
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
import Arch_rc
|
||||
|
||||
class BIMWorkbench(Workbench):
|
||||
|
||||
def __init__(self):
|
||||
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
|
||||
bdir = os.path.join(FreeCAD.getResourceDir(), "Mod", "BIM")
|
||||
tt = QT_TRANSLATE_NOOP("BIM","The BIM workbench is used to model buildings")
|
||||
self.__class__.MenuText = QT_TRANSLATE_NOOP("BIM", "BIM")
|
||||
self.__class__.ToolTip = tt
|
||||
self.__class__.Icon = os.path.join(bdir,"Resources", "icons",
|
||||
"BIMWorkbench.svg")
|
||||
|
||||
def Initialize(self):
|
||||
|
||||
# add translations and icon paths
|
||||
FreeCADGui.addIconPath(":/icons")
|
||||
FreeCADGui.addLanguagePath(":/translations")
|
||||
|
||||
# Create menus and toolbars
|
||||
self.createTools()
|
||||
|
||||
# Load Arch & Draft preference pages
|
||||
self.loadPreferences()
|
||||
|
||||
Log("Loading BIM module... done\n")
|
||||
FreeCADGui.updateLocale()
|
||||
|
||||
|
||||
def createTools(self):
|
||||
|
||||
"Create tolbars and menus"
|
||||
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
|
||||
# Import Draft & BIM commands
|
||||
import DraftTools
|
||||
import bimcommands
|
||||
from nativeifc import ifc_commands
|
||||
|
||||
# build menus and toolbars
|
||||
self.draftingtools = [
|
||||
"BIM_Sketch",
|
||||
"Draft_Line",
|
||||
"Draft_Wire",
|
||||
"Draft_Circle",
|
||||
"Draft_Arc",
|
||||
"Draft_Arc_3Points",
|
||||
"Draft_Fillet",
|
||||
"Draft_Ellipse",
|
||||
"Draft_Polygon",
|
||||
"Draft_Rectangle",
|
||||
"Draft_BSpline",
|
||||
"Draft_BezCurve",
|
||||
"Draft_CubicBezCurve",
|
||||
"Draft_Point",
|
||||
]
|
||||
|
||||
self.annotationtools = [
|
||||
#"BIM_ImagePlane",
|
||||
"BIM_Text",
|
||||
"Draft_ShapeString",
|
||||
"BIM_DimensionAligned",
|
||||
"BIM_DimensionHorizontal",
|
||||
"BIM_DimensionVertical",
|
||||
"BIM_Leader",
|
||||
"Draft_Label",
|
||||
"Arch_Axis",
|
||||
"Arch_AxisSystem",
|
||||
"Arch_Grid",
|
||||
"Arch_SectionPlane",
|
||||
"Draft_Hatch",
|
||||
"BIM_TDPage",
|
||||
"BIM_TDView",
|
||||
"BIM_Shape2DView",
|
||||
]
|
||||
|
||||
self.bimtools = [
|
||||
"BIM_Project",
|
||||
"Arch_Site",
|
||||
"Arch_Building",
|
||||
"Arch_Level",
|
||||
"Arch_Space",
|
||||
"Separator",
|
||||
"Arch_Wall",
|
||||
"Arch_CurtainWall",
|
||||
"BIM_Column",
|
||||
"BIM_Beam",
|
||||
"BIM_Slab",
|
||||
"BIM_Door",
|
||||
"Arch_Window",
|
||||
"Arch_Pipe",
|
||||
"Arch_PipeConnector",
|
||||
"Arch_Stairs",
|
||||
"Arch_Roof",
|
||||
"Arch_Panel",
|
||||
"Arch_Frame",
|
||||
"Arch_Fence",
|
||||
"Arch_Truss",
|
||||
"Arch_Rebar",
|
||||
]
|
||||
|
||||
self.generictools = [
|
||||
"Arch_Profile",
|
||||
"BIM_Box",
|
||||
"BIM_Builder",
|
||||
"Draft_Facebinder",
|
||||
"BIM_Library",
|
||||
"Arch_Component",
|
||||
"Arch_Reference",
|
||||
]
|
||||
|
||||
self.modify = [
|
||||
"Draft_Move",
|
||||
"BIM_Copy",
|
||||
"Draft_Rotate",
|
||||
"BIM_Clone",
|
||||
"BIM_Unclone",
|
||||
"Draft_Offset",
|
||||
"BIM_Offset2D",
|
||||
"Draft_Trimex",
|
||||
"Draft_Join",
|
||||
"Draft_Split",
|
||||
"Draft_Scale",
|
||||
"Draft_Stretch",
|
||||
"BIM_Rewire",
|
||||
"BIM_Glue",
|
||||
"Draft_Upgrade",
|
||||
"Draft_Downgrade",
|
||||
"Draft_Draft2Sketch",
|
||||
"Arch_CutPlane",
|
||||
"Arch_Add",
|
||||
"Arch_Remove",
|
||||
"BIM_Reextrude",
|
||||
"Draft_OrthoArray",
|
||||
"Draft_PathArray",
|
||||
"Draft_PointArray",
|
||||
"Draft_Mirror",
|
||||
"BIM_Extrude",
|
||||
"BIM_Cut",
|
||||
"BIM_Fuse",
|
||||
"BIM_Common",
|
||||
"BIM_Compound",
|
||||
"BIM_SimpleCopy",
|
||||
]
|
||||
|
||||
self.manage = [
|
||||
"BIM_Setup",
|
||||
"BIM_Views",
|
||||
"BIM_ProjectManager",
|
||||
"BIM_Windows",
|
||||
"BIM_IfcElements",
|
||||
"BIM_IfcQuantities",
|
||||
"BIM_IfcProperties",
|
||||
"BIM_Classification",
|
||||
"BIM_Layers",
|
||||
"BIM_Material",
|
||||
"Arch_Schedule",
|
||||
"BIM_Preflight",
|
||||
"Draft_AnnotationStyleEditor",
|
||||
]
|
||||
|
||||
self.utils = [
|
||||
"BIM_TogglePanels",
|
||||
"BIM_Trash",
|
||||
"BIM_WPView",
|
||||
"Draft_SelectGroup",
|
||||
"Draft_Slope",
|
||||
"Draft_WorkingPlaneProxy",
|
||||
"Draft_AddConstruction",
|
||||
"Arch_SplitMesh",
|
||||
"Arch_MeshToShape",
|
||||
"Arch_SelectNonSolidMeshes",
|
||||
"Arch_RemoveShape",
|
||||
"Arch_CloseHoles",
|
||||
"Arch_MergeWalls",
|
||||
"Arch_Check",
|
||||
"Arch_ToggleIfcBrepFlag",
|
||||
"Arch_ToggleSubs",
|
||||
"Arch_Survey",
|
||||
"BIM_Diff",
|
||||
"BIM_IfcExplorer",
|
||||
]
|
||||
|
||||
nudge = [
|
||||
"BIM_Nudge_Switch",
|
||||
"BIM_Nudge_Up",
|
||||
"BIM_Nudge_Down",
|
||||
"BIM_Nudge_Left",
|
||||
"BIM_Nudge_Right",
|
||||
"BIM_Nudge_RotateLeft",
|
||||
"BIM_Nudge_RotateRight",
|
||||
"BIM_Nudge_Extend",
|
||||
"BIM_Nudge_Shrink",
|
||||
]
|
||||
|
||||
# append BIM snaps
|
||||
|
||||
from draftutils import init_tools
|
||||
self.snapbar = init_tools.get_draft_snap_commands()
|
||||
self.snapmenu = self.snapbar + [
|
||||
"BIM_SetWPTop",
|
||||
"BIM_SetWPFront",
|
||||
"BIM_SetWPSide",
|
||||
]
|
||||
|
||||
# create generic tools command
|
||||
|
||||
class BIM_GenericTools:
|
||||
def __init__(self, tools):
|
||||
self.tools = tools
|
||||
def GetCommands(self):
|
||||
return self.tools
|
||||
def GetResources(self):
|
||||
t = QT_TRANSLATE_NOOP("BIM_GenericTools", "Generic 3D tools")
|
||||
return { "MenuText": t, "ToolTip": t, "Icon": "BIM_Box"}
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
FreeCADGui.addCommand("BIM_GenericTools", BIM_GenericTools(self.generictools))
|
||||
self.bimtools.append("BIM_GenericTools")
|
||||
|
||||
# load rebar tools (Reinforcement addon)
|
||||
|
||||
try:
|
||||
import RebarTools
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
# create popup group for Rebar tools
|
||||
class RebarGroupCommand:
|
||||
def GetCommands(self):
|
||||
return tuple(["Arch_Rebar"] + RebarTools.RebarCommands)
|
||||
|
||||
def GetResources(self):
|
||||
return {
|
||||
"MenuText": QT_TRANSLATE_NOOP(
|
||||
"Arch_RebarTools", "Reinforcement tools"
|
||||
),
|
||||
"ToolTip": QT_TRANSLATE_NOOP(
|
||||
"Arch_RebarTools", "Reinforcement tools"
|
||||
),
|
||||
"Icon": "Arch_Rebar",
|
||||
}
|
||||
|
||||
def IsActive(self):
|
||||
return not FreeCAD.ActiveDocument is None
|
||||
|
||||
FreeCADGui.addCommand("Arch_RebarTools", RebarGroupCommand())
|
||||
self.bimtools[self.bimtools.index("Arch_Rebar")] = "Arch_RebarTools"
|
||||
RebarTools.load_translations()
|
||||
Log("Load Reinforcement Module...done\n")
|
||||
if hasattr(RebarTools, "updateLocale"):
|
||||
RebarTools.updateLocale()
|
||||
#self.rebar = RebarTools.RebarCommands + ["Arch_Rebar"]
|
||||
|
||||
# try to load bimbots
|
||||
|
||||
try:
|
||||
import bimbots
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
class BIMBots:
|
||||
def GetResources(self):
|
||||
return bimbots.get_plugin_info()
|
||||
|
||||
def Activated(self):
|
||||
bimbots.launch_ui()
|
||||
|
||||
FreeCADGui.addCommand("BIMBots", BIMBots())
|
||||
self.utils.append("BIMBots")
|
||||
|
||||
# load Reporting
|
||||
|
||||
try:
|
||||
import report
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
if "Report_Create" in Gui.listCommands():
|
||||
self.manage[self.manage.index("Arch_Schedule")] = "Report_Create"
|
||||
|
||||
# load webtools
|
||||
|
||||
try:
|
||||
import BIMServer, Git, Sketchfab
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
self.utils.extend(
|
||||
[
|
||||
"WebTools_Git",
|
||||
"WebTools_BimServer",
|
||||
"WebTools_Sketchfab",
|
||||
]
|
||||
)
|
||||
|
||||
# load flamingo
|
||||
|
||||
try:
|
||||
import CommandsPolar, CommandsFrame, CommandsPipe
|
||||
except ImportError:
|
||||
flamingo = None
|
||||
else:
|
||||
flamingo = [
|
||||
"frameIt",
|
||||
"fillFrame",
|
||||
"insertPath",
|
||||
"insertSection",
|
||||
"FrameLineManager",
|
||||
"spinSect",
|
||||
"reverseBeam",
|
||||
"shiftBeam",
|
||||
"pivotBeam",
|
||||
"levelBeam",
|
||||
"alignEdge",
|
||||
"rotJoin",
|
||||
"alignFlange",
|
||||
"stretchBeam",
|
||||
"extend",
|
||||
"adjustFrameAngle",
|
||||
"insertPipe",
|
||||
"insertElbow",
|
||||
"insertReduct",
|
||||
"insertCap",
|
||||
"insertFlange",
|
||||
"insertUbolt",
|
||||
"insertPypeLine",
|
||||
"breakPipe",
|
||||
"mateEdges",
|
||||
"extend2intersection",
|
||||
"extend1intersection",
|
||||
"laydown",
|
||||
"raiseup",
|
||||
]
|
||||
|
||||
# load fasteners
|
||||
|
||||
try:
|
||||
import FastenerBase, FastenersCmd
|
||||
except ImportError:
|
||||
fasteners = None
|
||||
else:
|
||||
fasteners = [
|
||||
c
|
||||
for c in FastenerBase.FSGetCommands("screws")
|
||||
if not isinstance(c, tuple)
|
||||
]
|
||||
|
||||
# load nativeifc tools
|
||||
|
||||
ifctools = ifc_commands.get_commands()
|
||||
|
||||
# create toolbars
|
||||
|
||||
t1 = QT_TRANSLATE_NOOP("Workbench", "Drafting tools")
|
||||
t2 = QT_TRANSLATE_NOOP("Workbench", "Draft snap")
|
||||
t3 = QT_TRANSLATE_NOOP("Workbench", "3D/BIM tools")
|
||||
t4 = QT_TRANSLATE_NOOP("Workbench", "Annotation tools")
|
||||
t5 = QT_TRANSLATE_NOOP("Workbench", "Modification tools")
|
||||
t6 = QT_TRANSLATE_NOOP("Workbench", "Manage tools")
|
||||
self.appendToolbar(t1, self.draftingtools)
|
||||
self.appendToolbar(t2, self.snapbar)
|
||||
self.appendToolbar(t3, self.bimtools)
|
||||
self.appendToolbar(t4, self.annotationtools)
|
||||
self.appendToolbar(t5, self.modify)
|
||||
self.appendToolbar(t6, self.manage)
|
||||
|
||||
# create menus
|
||||
|
||||
t1 = QT_TRANSLATE_NOOP("Workbench", "&2D Drafting")
|
||||
t2 = QT_TRANSLATE_NOOP("Workbench", "&3D/BIM")
|
||||
t3 = QT_TRANSLATE_NOOP("Workbench", "Reinforcement tools")
|
||||
t4 = QT_TRANSLATE_NOOP("Workbench", "&Annotation")
|
||||
t5 = QT_TRANSLATE_NOOP("Workbench", "&Snapping")
|
||||
t6 = QT_TRANSLATE_NOOP("Workbench", "&Modify")
|
||||
t7 = QT_TRANSLATE_NOOP("Workbench", "&Manage")
|
||||
t8 = QT_TRANSLATE_NOOP("Workbench", "&IFC")
|
||||
t9 = QT_TRANSLATE_NOOP("Workbench", "&Flamingo")
|
||||
t10 = QT_TRANSLATE_NOOP("Workbench", "&Fasteners")
|
||||
t11 = QT_TRANSLATE_NOOP("Workbench", "&Utils")
|
||||
t12 = QT_TRANSLATE_NOOP("Workbench", "Nudge")
|
||||
|
||||
#self.bimtools_menu = list(self.bimtools)
|
||||
#if "Arch_RebarTools" in self.bimtools_menu:
|
||||
# self.bimtools_menu.remove("Arch_RebarTools")
|
||||
self.appendMenu(t1, self.draftingtools)
|
||||
self.appendMenu(t2, self.bimtools)
|
||||
#if self.rebar:
|
||||
# self.appendMenu([t2, t3], self.rebar)
|
||||
self.appendMenu(t4, self.annotationtools)
|
||||
self.appendMenu(t5, self.snapmenu)
|
||||
self.appendMenu(t6, self.modify)
|
||||
self.appendMenu(t7, self.manage)
|
||||
if ifctools:
|
||||
self.appendMenu(t8, ifctools)
|
||||
if flamingo:
|
||||
self.appendMenu(t9, flamingo)
|
||||
if fasteners:
|
||||
self.appendMenu(t10, fasteners)
|
||||
self.appendMenu(t11, self.utils)
|
||||
self.appendMenu([t11, t12], nudge)
|
||||
|
||||
def loadPreferences(self):
|
||||
|
||||
"""Set up preferences pages"""
|
||||
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
|
||||
t1 = QT_TRANSLATE_NOOP("QObject", "Arch")
|
||||
t2 = QT_TRANSLATE_NOOP("QObject", "Draft")
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-arch.ui", t1)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-archdefaults.ui", t1)
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
if hasattr(FreeCADGui.draftToolBar, "loadedPreferences"):
|
||||
return
|
||||
from draftutils import params
|
||||
params._param_observer_start()
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draft.ui", t2)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftinterface.ui", t2)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftsnap.ui", t2)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-draftvisual.ui", t2)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-drafttexts.ui", t2)
|
||||
FreeCADGui.draftToolBar.loadedPreferences = True
|
||||
|
||||
def setupMultipleObjectSelection(self):
|
||||
|
||||
import BimSelect
|
||||
|
||||
if hasattr(FreeCADGui, "addDocumentObserver") and not hasattr(
|
||||
self, "BimSelectObserver"
|
||||
):
|
||||
self.BimSelectObserver = BimSelect.Setup()
|
||||
FreeCADGui.addDocumentObserver(self.BimSelectObserver)
|
||||
|
||||
def Activated(self):
|
||||
|
||||
import WorkingPlane
|
||||
from DraftGui import todo
|
||||
import BimStatusBar
|
||||
from nativeifc import ifc_observer
|
||||
|
||||
PARAMS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM")
|
||||
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
FreeCADGui.draftToolBar.Activated()
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.show()
|
||||
if hasattr(WorkingPlane, "_view_observer_start"):
|
||||
WorkingPlane._view_observer_start()
|
||||
if PARAMS.GetBool("FirstTime", True) and (not hasattr(FreeCAD, "TestEnvironment")):
|
||||
todo.delay(FreeCADGui.runCommand, "BIM_Welcome")
|
||||
todo.delay(BimStatusBar.setStatusIcons, True)
|
||||
FreeCADGui.Control.clearTaskWatcher()
|
||||
|
||||
class BimWatcher:
|
||||
def __init__(self, cmds, name, invert=False):
|
||||
self.commands = cmds
|
||||
self.title = name
|
||||
self.invert = invert
|
||||
|
||||
def shouldShow(self):
|
||||
if self.invert:
|
||||
return (FreeCAD.ActiveDocument != None) and (
|
||||
FreeCADGui.Selection.getSelection() != []
|
||||
)
|
||||
else:
|
||||
return (FreeCAD.ActiveDocument != None) and (
|
||||
not FreeCADGui.Selection.getSelection()
|
||||
)
|
||||
|
||||
FreeCADGui.Control.addTaskWatcher(
|
||||
[
|
||||
BimWatcher(self.draftingtools + self.annotationtools, "2D geometry"),
|
||||
BimWatcher(self.bimtools, "3D/BIM geometry"),
|
||||
BimWatcher(self.modify, "Modify", invert=True),
|
||||
]
|
||||
)
|
||||
|
||||
# restore views widget if needed
|
||||
if PARAMS.GetBool("RestoreBimViews", True):
|
||||
from bimcommands import BimViews
|
||||
|
||||
w = BimViews.findWidget()
|
||||
if not w:
|
||||
FreeCADGui.runCommand("BIM_Views")
|
||||
else:
|
||||
w.show()
|
||||
w.toggleViewAction().setVisible(True)
|
||||
|
||||
self.setupMultipleObjectSelection()
|
||||
|
||||
# add NativeIFC document observer
|
||||
ifc_observer.add_observer()
|
||||
|
||||
# adding a Help menu manipulator
|
||||
# https://github.com/FreeCAD/FreeCAD/pull/10933
|
||||
class BIM_WBManipulator:
|
||||
def modifyMenuBar(self):
|
||||
return [
|
||||
{"insert": "BIM_Examples", "menuItem": "Std_ReportBug", "after": ""},
|
||||
{"insert": "BIM_Tutorial", "menuItem": "Std_ReportBug", "after": ""},
|
||||
{"insert": "BIM_Help", "menuItem": "Std_ReportBug", "after": ""},
|
||||
{"insert": "BIM_Welcome", "menuItem": "Std_ReportBug", "after": ""},
|
||||
]
|
||||
if not hasattr(Gui, "BIM_WBManipulator"):
|
||||
Gui.BIM_WBManipulator = BIM_WBManipulator()
|
||||
Gui.addWorkbenchManipulator(Gui.BIM_WBManipulator)
|
||||
|
||||
Log("BIM workbench activated\n")
|
||||
|
||||
|
||||
def Deactivated(self):
|
||||
|
||||
from DraftGui import todo
|
||||
import BimStatusBar
|
||||
from bimcommands import BimViews
|
||||
import WorkingPlane
|
||||
from nativeifc import ifc_observer
|
||||
|
||||
PARAMS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM")
|
||||
|
||||
if hasattr(self, "BimSelectObserver"):
|
||||
FreeCADGui.removeDocumentObserver(self.BimSelectObserver)
|
||||
del self.BimSelectObserver
|
||||
|
||||
if hasattr(FreeCADGui, "draftToolBar"):
|
||||
FreeCADGui.draftToolBar.Deactivated()
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.hide()
|
||||
|
||||
if hasattr(WorkingPlane, "_view_observer_stop"):
|
||||
WorkingPlane._view_observer_stop()
|
||||
|
||||
# print("Deactivating status icon")
|
||||
todo.delay(BimStatusBar.setStatusIcons, False)
|
||||
FreeCADGui.Control.clearTaskWatcher()
|
||||
|
||||
# store views widget state and vertical size
|
||||
w = BimViews.findWidget()
|
||||
PARAMS.SetBool("RestoreBimViews", bool(w))
|
||||
if w:
|
||||
PARAMS.SetInt("BimViewsSize", w.height())
|
||||
w.hide()
|
||||
w.toggleViewAction().setVisible(False)
|
||||
|
||||
# add NativeIFC document observer
|
||||
ifc_observer.remove_observer()
|
||||
|
||||
# Ifc stuff
|
||||
try:
|
||||
from nativeifc import ifc_status
|
||||
ifc_status.toggle_lock(False)
|
||||
except:
|
||||
pass
|
||||
|
||||
# remove manipulator
|
||||
if hasattr(Gui, "BIM_WBManipulator"):
|
||||
Gui.removeWorkbenchManipulator(Gui.BIM_WBManipulator)
|
||||
del Gui.BIM_WBManipulator
|
||||
Gui.activeWorkbench().reloadActive()
|
||||
|
||||
Log("BIM workbench deactivated\n")
|
||||
|
||||
|
||||
def ContextMenu(self, recipient):
|
||||
|
||||
import DraftTools
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
if recipient == "Tree":
|
||||
groups = False
|
||||
ungroupable = False
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
if o.isDerivedFrom("App::DocumentObjectGroup") or o.hasExtension(
|
||||
"App::GroupExtension"
|
||||
):
|
||||
groups = True
|
||||
else:
|
||||
groups = False
|
||||
break
|
||||
for o in FreeCADGui.Selection.getSelection():
|
||||
for parent in o.InList:
|
||||
if parent.isDerivedFrom(
|
||||
"App::DocumentObjectGroup"
|
||||
) or parent.hasExtension("App::GroupExtension"):
|
||||
if o in parent.Group:
|
||||
ungroupable = True
|
||||
else:
|
||||
ungroupable = False
|
||||
break
|
||||
if groups:
|
||||
self.appendContextMenu("", ["Draft_SelectGroup"])
|
||||
if ungroupable:
|
||||
self.appendContextMenu("", ["BIM_Ungroup"])
|
||||
if (len(FreeCADGui.Selection.getSelection()) == 1) and (
|
||||
FreeCADGui.Selection.getSelection()[0].Name == "Trash"
|
||||
):
|
||||
self.appendContextMenu("", ["BIM_EmptyTrash"])
|
||||
elif recipient == "View":
|
||||
self.appendContextMenu(translate("BIM", "Snapping"), self.snapmenu)
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
if FreeCADGui.Selection.getSelection()[0].Name != "Trash":
|
||||
self.appendContextMenu("", ["BIM_Trash"])
|
||||
self.appendContextMenu("", ["Draft_AddConstruction", "Draft_AddToGroup"])
|
||||
allclones = False
|
||||
for obj in FreeCADGui.Selection.getSelection():
|
||||
if hasattr(obj, "CloneOf") and obj.CloneOf:
|
||||
allclones = True
|
||||
else:
|
||||
allclones = False
|
||||
break
|
||||
if allclones:
|
||||
self.appendContextMenu("", ["BIM_ResetCloneColors"])
|
||||
if len(FreeCADGui.Selection.getSelection()) == 1:
|
||||
obj = FreeCADGui.Selection.getSelection()[0]
|
||||
if hasattr(obj, "Group"):
|
||||
if obj.getTypeIdOfProperty("Group") == "App::PropertyLinkList":
|
||||
self.appendContextMenu("", ["BIM_Reorder"])
|
||||
if obj.isDerivedFrom("TechDraw::DrawView"):
|
||||
self.appendContextMenu("", ["BIM_MoveView"])
|
||||
|
||||
def GetClassName(self):
|
||||
return "Gui::PythonWorkbench"
|
||||
|
||||
|
||||
FreeCADGui.addWorkbench(BIMWorkbench)
|
||||
|
||||
# Preference pages for importing and exporting various file formats
|
||||
# are independent of the loading of the workbench and can be loaded at startup
|
||||
|
||||
def QT_TRANSLATE_NOOP(context, text):
|
||||
return text
|
||||
t = QT_TRANSLATE_NOOP("QObject", "Import-Export")
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-ifc.ui", t)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-ifc-export.ui", t)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferences-dae.ui", t)
|
||||
FreeCADGui.addPreferencePage(":/ui/preferencesNativeIFC.ui", t)
|
||||
|
||||
# Add unit tests
|
||||
FreeCAD.__unit_test__ += ["TestArch"]
|
||||
# The NativeIFC tests require internet connection and file download
|
||||
# FreeCAD.__unit_test__ += ["nativeifc.ifc_selftest"]
|
||||