summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorsumit2020-06-10 21:48:45 +0530
committersumit2020-06-10 21:48:45 +0530
commitda75f284f80b25df88dc2362df97c31e9c09b2aa (patch)
treed5f8476d4d2928f2df4e8f9f8c2fd0e22c092eae /src/main
parent2e61ad72fcc7702fdecce1faeb8d7ce707701e28 (diff)
parent150b7bb892ed82521a5b00372e6a9f3eefce243f (diff)
downloadChemical-PFD-da75f284f80b25df88dc2362df97c31e9c09b2aa.tar.gz
Chemical-PFD-da75f284f80b25df88dc2362df97c31e9c09b2aa.tar.bz2
Chemical-PFD-da75f284f80b25df88dc2362df97c31e9c09b2aa.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/main')
-rw-r--r--src/main/python/main.py2
-rw-r--r--src/main/python/utils/app.py5
-rw-r--r--src/main/python/utils/canvas.py24
-rw-r--r--src/main/python/utils/dialogs.py19
-rw-r--r--src/main/python/utils/fileWindow.py2
-rw-r--r--src/main/python/utils/toolbar.py43
-rw-r--r--src/main/python/utils/undo.py6
-rw-r--r--src/main/resources/base/Compressors/Centrifugal Compressor.svg123
-rw-r--r--src/main/resources/base/Compressors/Ejector Compressor.svg66
-rw-r--r--src/main/resources/base/Compressors/Fan.svg109
-rw-r--r--src/main/resources/base/Compressors/Positive Displacement Compressor.svg94
-rw-r--r--src/main/resources/base/Compressors/Reciprocating Compressor.svg99
-rw-r--r--src/main/resources/base/Compressors/Turbine.svg104
-rw-r--r--src/main/resources/base/config/items.json65
-rw-r--r--src/main/resources/base/svg/Compressors/Centrifugal Compressor.svg123
-rw-r--r--src/main/resources/base/svg/Compressors/Ejector Compressor.svg66
-rw-r--r--src/main/resources/base/svg/Compressors/Fan.svg109
-rw-r--r--src/main/resources/base/svg/Compressors/Positive Displacement Compressor.svg94
-rw-r--r--src/main/resources/base/svg/Compressors/Reciprocating Compressor.svg99
-rw-r--r--src/main/resources/base/svg/Compressors/Turbine.svg104
-rw-r--r--src/main/resources/base/svg/Pumps/Blowing Egg.svg76
-rw-r--r--src/main/resources/base/svg/Pumps/Duplex Pump.svg156
-rw-r--r--src/main/resources/base/svg/Pumps/Ejector(Vapor Service).svg78
-rw-r--r--src/main/resources/base/svg/Pumps/Hand Pump with Drum.svg169
-rw-r--r--src/main/resources/base/toolbar/Compressors/Centrifugal Compressor.pngbin0 -> 1413 bytes
-rw-r--r--src/main/resources/base/toolbar/Compressors/Ejector Compressor.pngbin0 -> 1126 bytes
-rw-r--r--src/main/resources/base/toolbar/Compressors/Fan.pngbin0 -> 1600 bytes
-rw-r--r--src/main/resources/base/toolbar/Compressors/Positive Displacement Compressor.pngbin0 -> 1098 bytes
-rw-r--r--src/main/resources/base/toolbar/Compressors/Reciprocating Compressor.pngbin0 -> 1091 bytes
-rw-r--r--src/main/resources/base/toolbar/Compressors/Turbine.pngbin0 -> 1368 bytes
-rw-r--r--src/main/resources/base/toolbar/Piping/Inflow Line.pngbin1283 -> 1185 bytes
-rw-r--r--src/main/resources/base/toolbar/Piping/Outflow Line.pngbin1323 -> 1244 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Blowing Egg.pngbin0 -> 1556 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Duplex Pump.pngbin1416 -> 1387 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Ejector(Vapor Service).pngbin0 -> 1106 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Hand Pump with Drum.pngbin0 -> 2166 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Plunger Pump.pngbin1037 -> 1057 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Proportioning Pump.pngbin1289 -> 1272 bytes
-rw-r--r--src/main/resources/base/toolbar/Pumps/Reciprocating Pump.pngbin1312 -> 1258 bytes
39 files changed, 1739 insertions, 96 deletions
diff --git a/src/main/python/main.py b/src/main/python/main.py
index ff41413..ed64570 100644
--- a/src/main/python/main.py
+++ b/src/main/python/main.py
@@ -73,7 +73,7 @@ class appWindow(QMainWindow):
# self.addToolBar(Qt.LeftToolBarArea, self.toolbar)
self.addDockWidget(Qt.LeftDockWidgetArea, self.toolbar)
self.toolbar.toolbuttonClicked.connect(self.toolButtonClicked)
- self.toolbar.populateToolbar(self.toolbar.toolbarItemList)
+ self.toolbar.populateToolbar()
def toolButtonClicked(self, object):
currentDiagram = self.mdi.currentSubWindow().tabber.currentWidget().painter
diff --git a/src/main/python/utils/app.py b/src/main/python/utils/app.py
index 9812fda..4cc8228 100644
--- a/src/main/python/utils/app.py
+++ b/src/main/python/utils/app.py
@@ -5,14 +5,15 @@ Declare fbs application so that it can be imported in other modules.
from fbs_runtime.application_context.PyQt5 import ApplicationContext
from PyQt5.QtCore import QSettings
from json import JSONEncoder, dumps, loads, dump, load
+from os.path import join
app = ApplicationContext()
settings = QSettings(QSettings.IniFormat, QSettings.UserScope ,"FOSSEE", "Chemical-PFD")
version = app.build_settings['version']
-def fileImporter(file):
+def fileImporter(*file):
# Helper function to fetch files from src/main/resources
- return app.get_resource(file)
+ return app.get_resource(join(*file))
class JSON_Encoder:
diff --git a/src/main/python/utils/canvas.py b/src/main/python/utils/canvas.py
index 3f9cee5..66d38e8 100644
--- a/src/main/python/utils/canvas.py
+++ b/src/main/python/utils/canvas.py
@@ -16,13 +16,14 @@ class canvas(QWidget):
for context menu and dialogs.
"""
- def __init__(self, parent=None, size= 'A4', ppi= '72' , parentMdiArea = None, parentFileWindow = None):
+ def __init__(self, parent=None, size= 'A4', ppi= '72' , parentMdiArea = None, parentFileWindow = None, landscape=False):
super(canvas, self).__init__(parent)
#Store values for the canvas dimensions for ease of access, these are here just to be
# manipulated by the setters and getters
self._ppi = ppi
self._canvasSize = size
+ self._landscape = landscape
# self.setFixedSize(parent.size())
#Create area for the graphic items to be placed, this is just here right now for the future
# when we will draw items on this, this might be changed if QGraphicScene is subclassed.
@@ -104,22 +105,33 @@ class canvas(QWidget):
@property
def canvasSize(self):
return self._canvasSize
+
@property
def ppi(self):
return self._ppi
+ @property
+ def landscape(self):
+ return self._landscape
+
@canvasSize.setter
def canvasSize(self, size):
self._canvasSize = size
if self.painter:
- self.resizeView(*paperSizes[self.canvasSize][self.ppi])
+ self.resizeView(*(sorted(paperSizes[self.canvasSize][self.ppi], reverse = self.landscape)))
@ppi.setter
def ppi(self, ppi):
self._ppi = ppi
if self.painter:
- self.resizeView(*paperSizes[self.canvasSize][self.ppi])
-
+ self.resizeView(*(sorted(paperSizes[self.canvasSize][self.ppi], reverse = self.landscape)))
+
+ @landscape.setter
+ def landscape(self, bool):
+ self._landscape = bool
+ if self.painter:
+ self.resizeView(*(sorted(paperSizes[self.canvasSize][self.ppi], reverse = self.landscape)))
+
#following 2 methods are defined for correct pickling of the scene. may be changed to json or xml later so as
# to not have a binary file.
def __getstate__(self) -> dict:
@@ -129,12 +141,14 @@ class canvas(QWidget):
"canvasSize": self._canvasSize,
"ObjectName": self.objectName(),
"symbols": [i for i in self.painter.items() if isinstance(i, shapes.NodeItem)],
- "lines": sorted([i for i in self.painter.items() if isinstance(i, shapes.Line)], key = lambda x: 1 if x.refLine else 0)
+ "lines": sorted([i for i in self.painter.items() if isinstance(i, shapes.Line)], key = lambda x: 1 if x.refLine else 0),
+ "landscape": self.landscape
}
def __setstate__(self, dict):
self._ppi = dict['ppi']
self._canvasSize = dict['canvasSize']
+ self.landscape = dict['landscape']
self.setObjectName(dict['ObjectName'])
for item in dict['symbols']:
diff --git a/src/main/python/utils/dialogs.py b/src/main/python/utils/dialogs.py
index fa3b5f1..79685c5 100644
--- a/src/main/python/utils/dialogs.py
+++ b/src/main/python/utils/dialogs.py
@@ -1,12 +1,16 @@
-from PyQt5.QtWidgets import QDialog, QPushButton, QFormLayout, QComboBox, QLabel, QMessageBox, QDialogButtonBox, QHBoxLayout
-from .data import sheetDimensionList, ppiList
+from PyQt5.QtWidgets import (QCheckBox, QComboBox, QDialog, QDialogButtonBox,
+ QFormLayout, QHBoxLayout, QLabel, QMessageBox,
+ QPushButton)
+
+from .data import ppiList, sheetDimensionList
+
class paperDims(QDialog):
"""
Utility dialog box to adjust the current canvas's dimensions, might return just dimensions later
so that sizes do not need to be imported in every other module.
"""
- def __init__(self, parent=None, size='A4', ppi='72', name='Canvas Size'):
+ def __init__(self, parent=None, size='A4', ppi='72', name='Canvas Size', landscape=False):
super(paperDims, self).__init__(parent)
#store initial values to show currently set value, also updated when changed. these are returned at EOL
@@ -36,6 +40,10 @@ class paperDims(QDialog):
dialogBoxLayout.setWidget(1, QFormLayout.LabelRole, ppiLabel)
dialogBoxLayout.setWidget(1, QFormLayout.FieldRole, ppiComboBox)
+ self.landscapeCheckBox = QCheckBox('&Landscape Mode')
+ self.landscapeCheckBox.setChecked(landscape)
+ dialogBoxLayout.setWidget(2, QFormLayout.SpanningRole, self.landscapeCheckBox)
+
# add ok and cancel buttons
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
buttonBox.accepted.connect(self.accept)
@@ -50,7 +58,8 @@ class paperDims(QDialog):
super(paperDims, self).exec_()
self.deleteLater() #remove from memory
#if ok was pressed return value else return None
- return (self.returnCanvasSize, self.returnCanvasPPI) if self.result() else None
+ print(self.landscapeCheckBox.isChecked())
+ return (self.returnCanvasSize, self.returnCanvasPPI, self.landscapeCheckBox.isChecked()) if self.result() else None
class sideViewSwitchDialog(QDialog):
"""
@@ -107,4 +116,4 @@ def showUndoDialog(undoView, parent):
layout = QHBoxLayout(dialogBox)
layout.addWidget(undoView)
dialogBox.setWindowTitle("Undo Stack")
- dialogBox.show() \ No newline at end of file
+ dialogBox.show()
diff --git a/src/main/python/utils/fileWindow.py b/src/main/python/utils/fileWindow.py
index 663a7f3..e0f5652 100644
--- a/src/main/python/utils/fileWindow.py
+++ b/src/main/python/utils/fileWindow.py
@@ -123,7 +123,7 @@ class fileWindow(QMdiSubWindow):
def adjustCanvasDialog(self):
#helper context menu function to the context menu dialog box
currentTab = self.tabber.currentWidget()
- result = dialogs.paperDims(self, currentTab._canvasSize, currentTab._ppi, currentTab.objectName()).exec_()
+ result = dialogs.paperDims(self, currentTab._canvasSize, currentTab._ppi, currentTab.objectName(), currentTab.landscape).exec_()
if result is not None:
currentTab.painter.undoStack.push(resizeCommand(result, currentTab, self))
diff --git a/src/main/python/utils/toolbar.py b/src/main/python/utils/toolbar.py
index 7883136..90b46fb 100644
--- a/src/main/python/utils/toolbar.py
+++ b/src/main/python/utils/toolbar.py
@@ -2,7 +2,7 @@ from fbs_runtime.application_context.PyQt5 import ApplicationContext
from PyQt5.QtCore import QSize, Qt, pyqtSignal, QMimeData
from PyQt5.QtGui import QIcon, QDrag
from PyQt5.QtWidgets import (QBoxLayout, QDockWidget, QGridLayout, QLineEdit,
- QScrollArea, QToolButton, QWidget, QApplication, QStyle)
+ QScrollArea, QToolButton, QWidget, QApplication, QStyle, QLabel)
from re import search, IGNORECASE
from .data import toolbarItems
@@ -20,12 +20,12 @@ class toolbar(QDockWidget):
def __init__(self, parent = None):
super(toolbar, self).__init__(parent)
self.toolbarButtonDict = dict() #initializes empty dict to store toolbar buttons
- self.toolbarButtonClassList = []
+ self.toolbarLabelDict = dict()
self.toolbarItems(toolbarItems.keys()) #creates all necessary buttons
self.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)
#mainly used to disable closeability of QDockWidget
-
+ self.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea | Qt.NoDockWidgetArea)
#declare main widget and layout
self.widget = QWidget(self)
self.layout = QBoxLayout(QBoxLayout.TopToBottom, self.widget)
@@ -57,11 +57,12 @@ class toolbar(QDockWidget):
# since changing parent would effect indexing, its important to go in reverse
self.diagAreaLayout.itemAt(i).widget().setParent(self)
- def populateToolbar(self, list):
+ def populateToolbar(self, filterFunc=None):
#called everytime the button box needs to be updated(incase of a filter)
self.clearLayout() #clears layout
- for itemClass in list:
- for item in self.toolbarButtonDict[itemClass].keys():
+ for itemClass in self.toolbarButtonDict.keys():
+ self.diagAreaLayout.addWidget(self.toolbarLabelDict[itemClass])
+ for item in filter(filterFunc, self.toolbarButtonDict[itemClass].keys()):
self.diagAreaLayout.addWidget(self.toolbarButtonDict[itemClass][item])
self.resize()
@@ -70,10 +71,10 @@ class toolbar(QDockWidget):
# self.populateToolbar() # populate with toolbar items
text = self.searchBox.text() #get text
if text == '':
- self.populateToolbar(self.toolbarItemList) # restore everything on empty string
+ self.populateToolbar() # restore everything on empty string
else:
# use regex to search filter through button list and add the remainder to toolbar
- self.populateToolbar(filter(lambda x: search(text, x, IGNORECASE), self.toolbarItemList))
+ self.populateToolbar(lambda x: search(text, x, IGNORECASE))
def resize(self):
# called when main window resizes, overloading resizeEvent caused issues.
@@ -81,18 +82,24 @@ class toolbar(QDockWidget):
self.layout.setDirection(QBoxLayout.TopToBottom) # here so that a horizontal toolbar can be implemented later
# self.setFixedHeight(self.height()) #span available height
width = self.width() - QApplication.style().pixelMetric(QStyle.PM_ScrollBarExtent)
+
# the following line, sets the required height for the current width, so that blank space doesnt occur
self.diagAreaWidget.setMinimumHeight(self.diagAreaLayout.heightForWidth(width))
self.setMinimumWidth(.17*parent.width()) #12% of parent width
# self.setMinimumWidth(self.diagAreaLayout.minimumSize().width()) #12% of parent width
self.diagAreaWidget.setLayout(self.diagAreaLayout)
self.diagArea.setWidget(self.diagAreaWidget)
+
+ for _, label in self.toolbarLabelDict.items():
+ label.setFixedSize(width, 20)
+
def toolbarItems(self, itemClasses):
#helper functions to create required buttons
for itemClass in itemClasses:
self.toolbarButtonDict[itemClass] = {}
- self.toolbarButtonClassList.append(itemClass)
+ label = sectionLabel(itemClass)
+ self.toolbarLabelDict[itemClass] = label
for item in toolbarItems[itemClass].keys():
obj = toolbarItems[itemClass][item]
button = toolbarButton(self, obj)
@@ -113,7 +120,7 @@ class toolbarButton(QToolButton):
def __init__(self, parent = None, item = None):
super(toolbarButton, self).__init__(parent)
#uses fbs resource manager to get icons
- self.setIcon(QIcon(fileImporter(f'toolbar/{item["icon"]}')))
+ self.setIcon(QIcon(fileImporter('toolbar', item['icon'])))
self.setIconSize(QSize(64, 64)) #unecessary but left for future references
self.dragStartPosition = None #intialize value for drag event
self.itemObject = item['object'] #refer current item object, to handle drag mime
@@ -147,4 +154,18 @@ class toolbarButton(QToolButton):
def minimumSizeHint(self):
#defines button size
- return QSize(40, 40) \ No newline at end of file
+ return QSize(40, 40)
+
+class sectionLabel(QLabel):
+
+ def __init__(self, *args):
+ super(sectionLabel, self).__init__(*args)
+ self.setAlignment(Qt.AlignHCenter)
+ self.setStyleSheet("""
+ QLabel{
+ background-color: #E6E6E3;
+ border: 2px solid gray;
+ border-left: 0px;
+ background-clip: padding;
+ }
+ """) \ No newline at end of file
diff --git a/src/main/python/utils/undo.py b/src/main/python/utils/undo.py
index b060550..8426494 100644
--- a/src/main/python/utils/undo.py
+++ b/src/main/python/utils/undo.py
@@ -95,15 +95,15 @@ class resizeCommand(QUndoCommand):
def __init__(self, new, canvas, widget, parent = None):
super(resizeCommand, self).__init__(parent)
self.parent = canvas
- self.old = self.parent.canvasSize, self.parent.ppi
+ self.old = self.parent.canvasSize, self.parent.ppi, self.parent.landscape
self.new = new
self.widget = widget
self.setText(f'Change canvas dimensions to {new[0]} at {new[1]} ppi')
def undo(self):
- self.parent.canvasSize, self.parent.ppi = self.old
+ self.parent.canvasSize, self.parent.ppi, self.parent.landscape = self.old
self.widget.resizeHandler()
def redo(self):
- self.parent.canvasSize, self.parent.ppi = self.new
+ self.parent.canvasSize, self.parent.ppi, self.parent.landscape = self.new
self.widget.resizeHandler() \ No newline at end of file
diff --git a/src/main/resources/base/Compressors/Centrifugal Compressor.svg b/src/main/resources/base/Compressors/Centrifugal Compressor.svg
new file mode 100644
index 0000000..15ae554
--- /dev/null
+++ b/src/main/resources/base/Compressors/Centrifugal Compressor.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ sodipodi:docname="Centrifugal Compressor.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ id="svg989"
+ version="1.1"
+ viewBox="0 0 39.831303 20.844073"
+ height="20.844072mm"
+ width="39.831303mm">
+ <defs
+ id="defs983">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4621"
+ id="linearGradient4623"
+ x1="552.6012"
+ y1="62.347649"
+ x2="557.84564"
+ y2="62.347649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-432.22912,85.871922)" />
+ <linearGradient
+ id="linearGradient4621"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4619" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-maximized="0"
+ inkscape:window-y="0"
+ inkscape:window-x="157"
+ inkscape:window-height="1020"
+ inkscape:window-width="1741"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="mm"
+ inkscape:cy="65.68083"
+ inkscape:cx="89.712248"
+ inkscape:zoom="3.959798"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata986">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-85.917679,-137.82627)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ id="g1606">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3798"
+ d="m 96.20808,137.99608 20.59969,5.19717 v 10.20535 l -20.59969,5.10268 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3800"
+ d="M 96.25532,145.63828 H 86.04997 v 5.10268 H 96.3498"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3802"
+ d="m 116.68966,148.22506 h 3.59077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3806"
+ d="m 102.64232,137.9183 v 1.68714"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3810"
+ d="m 110.9019,137.90158 v 3.9215"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient4623);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="145.73911"
+ x="120.37206"
+ height="4.9609375"
+ width="5.2444196"
+ id="rect3812" />
+ <text
+ id="text4627"
+ y="149.72087"
+ x="121.21709"
+ style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ xml:space="preserve"><tspan
+ style="font-size:4.23333px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="149.72087"
+ x="121.21709"
+ id="tspan4625"
+ sodipodi:role="line">M</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/Compressors/Ejector Compressor.svg b/src/main/resources/base/Compressors/Ejector Compressor.svg
new file mode 100644
index 0000000..cb345d1
--- /dev/null
+++ b/src/main/resources/base/Compressors/Ejector Compressor.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg983"
+ version="1.1"
+ viewBox="0 0 24.561319 6.5105553"
+ height="6.5105553mm"
+ width="24.561319mm">
+ <defs
+ id="defs977">
+ <linearGradient
+ xlink:href="#linearGradient5003"
+ id="linearGradient5005"
+ x1="523.9151"
+ y1="136.07031"
+ x2="530.93091"
+ y2="136.07031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9248707,0,0,0.9248707,-356.29188,11.161605)" />
+ <linearGradient
+ id="linearGradient5003"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5001" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata980">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-128.12939,-133.68995)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g1575">
+ <rect
+ y="133.95006"
+ x="128.26189"
+ height="6.1179466"
+ width="6.4887304"
+ id="rect4999"
+ style="fill:#ffffff;stroke:url(#linearGradient5005);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5007"
+ d="m 134.83292,138.79118 17.72492,1.07719 -0.0246,-6.03313 -17.72329,1.67043"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/Compressors/Fan.svg b/src/main/resources/base/Compressors/Fan.svg
new file mode 100644
index 0000000..b23a097
--- /dev/null
+++ b/src/main/resources/base/Compressors/Fan.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1609"
+ version="1.1"
+ viewBox="0 0 22.314726 10.768025"
+ height="10.768025mm"
+ width="22.314726mm">
+ <defs
+ id="defs1603">
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5021"
+ x1="526.4541"
+ y1="146.42702"
+ x2="537.41211"
+ y2="146.42702"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-217.02286,-18.174328)" />
+ <linearGradient
+ id="linearGradient5019"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5017" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5025"
+ gradientUnits="userSpaceOnUse"
+ x1="526.4541"
+ y1="146.42702"
+ x2="537.41211"
+ y2="146.42702"
+ gradientTransform="translate(-205.93117,-18.174328)" />
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5035"
+ gradientUnits="userSpaceOnUse"
+ x1="550.97614"
+ y1="119.36598"
+ x2="555.65332"
+ y2="119.36598"
+ gradientTransform="translate(-232.85061,15.414093)" />
+ </defs>
+ <metadata
+ id="metadata1606">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-87.872402,-124.6398)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g5850"
+ transform="translate(-221.42632,-1.7097248)">
+ <ellipse
+ ry="1.7706606"
+ rx="5.4790258"
+ cy="128.25269"
+ cx="314.91025"
+ id="path5015"
+ style="fill:#ffffff;stroke:url(#linearGradient5021);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <ellipse
+ style="fill:#ffffff;stroke:url(#linearGradient5025);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="ellipse5023"
+ cx="326.00192"
+ cy="128.25269"
+ rx="5.4790258"
+ ry="1.7706606" />
+ <path
+ id="path5027"
+ d="m 320.45616,128.48655 v 4.00904"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient5035);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5029"
+ width="4.6772165"
+ height="4.4099469"
+ x="318.12555"
+ y="132.5751" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ x="318.94144"
+ y="136.06596"
+ id="text5033"><tspan
+ id="tspan5031"
+ x="318.94144"
+ y="136.06596"
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none">M</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/Compressors/Positive Displacement Compressor.svg b/src/main/resources/base/Compressors/Positive Displacement Compressor.svg
new file mode 100644
index 0000000..99802b2
--- /dev/null
+++ b/src/main/resources/base/Compressors/Positive Displacement Compressor.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1647"
+ version="1.1"
+ viewBox="0 0 19.206747 19.125592"
+ height="19.125591mm"
+ width="19.206747mm">
+ <defs
+ id="defs1641">
+ <linearGradient
+ xlink:href="#linearGradient4635"
+ id="linearGradient4637"
+ x1="532.47394"
+ y1="91.475433"
+ x2="540.97839"
+ y2="91.475433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-393.96549,71.734459)" />
+ <linearGradient
+ id="linearGradient4635"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4633" />
+ </linearGradient>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path4665"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)" />
+ </marker>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4668"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata1644">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-133.31128,-156.841)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g2332">
+ <path
+ id="path4629"
+ d="m 133.31128,173.98222 h 4.06326 v -17.00893 h 11.24479 l -0.0236,17.03255 3.9215,-0.0236"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ y="162.07596"
+ x="138.50845"
+ height="2.2678571"
+ width="8.5044641"
+ id="rect4631"
+ style="fill:#ffffff;stroke:url(#linearGradient4637);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path4639"
+ d="m 142.76069,164.43832 v 11.52827"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/Compressors/Reciprocating Compressor.svg b/src/main/resources/base/Compressors/Reciprocating Compressor.svg
new file mode 100644
index 0000000..521e144
--- /dev/null
+++ b/src/main/resources/base/Compressors/Reciprocating Compressor.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="Reciprocating Compressor.svg"
+ width="29.586315mm"
+ height="14.722171mm"
+ viewBox="0 0 29.586315 14.722171"
+ version="1.1"
+ id="svg2363">
+ <sodipodi:namedview
+ inkscape:current-layer="svg2363"
+ inkscape:window-maximized="1"
+ inkscape:window-y="-11"
+ inkscape:window-x="-11"
+ inkscape:cy="41.59944"
+ inkscape:cx="37.179616"
+ inkscape:zoom="4.7773942"
+ showgrid="false"
+ id="namedview17"
+ inkscape:window-height="986"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
+ <defs
+ id="defs2357">
+ <linearGradient
+ gradientTransform="translate(-526.19954,-108.91903)"
+ gradientUnits="userSpaceOnUse"
+ y2="119.36598"
+ x2="555.65332"
+ y1="119.36598"
+ x1="550.97614"
+ id="linearGradient4993"
+ xlink:href="#linearGradient4991" />
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient4991">
+ <stop
+ id="stop4989"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata2360">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="g862">
+ <path
+ id="path4975"
+ d="m 0.132291,7.03037 v 7.55951 h 21.54465 V 6.93587 h -7.55951 V 0.1323 h -7.08708 v 6.61458 h -6.89806 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path4985"
+ d="m 21.769811,10.48035 h 2.93995"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="8.2419739"
+ x="24.776596"
+ height="4.4099469"
+ width="4.6772165"
+ id="rect4987"
+ style="fill:#ffffff;stroke:url(#linearGradient4993);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <text
+ id="text4997"
+ y="11.732819"
+ x="25.592484"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="11.732819"
+ x="25.592484"
+ id="tspan4995">M</tspan></text>
+ </g>
+</svg>
diff --git a/src/main/resources/base/Compressors/Turbine.svg b/src/main/resources/base/Compressors/Turbine.svg
new file mode 100644
index 0000000..6383f61
--- /dev/null
+++ b/src/main/resources/base/Compressors/Turbine.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg2245"
+ version="1.1"
+ viewBox="0 0 36.083744 21.067864"
+ height="21.067863mm"
+ width="36.083744mm">
+ <defs
+ id="defs2239">
+ <linearGradient
+ xlink:href="#linearGradient4991"
+ id="linearGradient5043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-479.53566,-43.473745)"
+ x1="550.97614"
+ y1="119.36598"
+ x2="555.65332"
+ y2="119.36598" />
+ <linearGradient
+ id="linearGradient4991"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4989" />
+ </linearGradient>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5089"
+ style="overflow:visible">
+ <path
+ id="path5087"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5055"
+ style="overflow:visible">
+ <path
+ id="path5053"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata2242">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-40.166464,-64.768355)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g2942">
+ <path
+ id="path5037"
+ d="m 61.76161,64.939784 -21.40111,5.59931 -0.0611,9.85655 21.42882,5.27186 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5039"
+ d="m 61.69806,75.864944 0.68965,0.0167 9.10387,0.006"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ y="73.687271"
+ x="71.440491"
+ height="4.4099469"
+ width="4.6772165"
+ id="rect5041"
+ style="fill:#ffffff;stroke:url(#linearGradient5043);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <text
+ id="text5047"
+ y="77.204559"
+ x="72.593079"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="77.204559"
+ x="72.593079"
+ id="tspan5045">T</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/config/items.json b/src/main/resources/base/config/items.json
index fff7505..9a55a4d 100644
--- a/src/main/resources/base/config/items.json
+++ b/src/main/resources/base/config/items.json
@@ -43,6 +43,71 @@
"class": "Pumps",
"object": "ReciprocatingPump",
"args": []
+ },
+ "Blowing Egg": {
+ "name": "Blowing Egg",
+ "icon": ".\\Pumps\\Blowing Egg.png",
+ "class": "Pumps",
+ "object": "BlowingEgg",
+ "args": []
+ },
+ "Ejector(Vapor Service)": {
+ "name": "Ejector(Vapor Service)",
+ "icon": ".\\Pumps\\Ejector(Vapor Service).png",
+ "class": "Pumps",
+ "object": "Ejector(VaporService)",
+ "args": []
+ },
+ "Hand Pump with Drum": {
+ "name": "Hand Pump with Drum",
+ "icon": ".\\Pumps\\Hand Pump with Drum.png",
+ "class": "Pumps",
+ "object": "HandPumpWithDrum",
+ "args": []
+ }
+ },
+ "Compressors": {
+ "Centrifugal Compressor": {
+ "name": "Centrifugal Compressor",
+ "icon": ".\\Compressors\\Centrifugal Compressor.png",
+ "class": "Compressors",
+ "object": "CentrifugalCompressor",
+ "args": []
+ },
+ "Ejector Compressor": {
+ "name": "Ejector Compressor",
+ "icon": ".\\Compressors\\Ejector Compressor.png",
+ "class": "Compressors",
+ "object": "EjectorCompressor",
+ "args": []
+ },
+ "Fan": {
+ "name": "Fan",
+ "icon": ".\\Compressors\\Fan.png",
+ "class": "Compressors",
+ "object": "Fan",
+ "args": []
+ },
+ "Positive Displacement Compressor": {
+ "name": "Positive Displacement Compressor",
+ "icon": ".\\Compressors\\Positive Displacement Compressor.png",
+ "class": "Compressors",
+ "object": "PositiveDisplacementCompressor",
+ "args": []
+ },
+ "Reciprocating Compressor": {
+ "name": "Reciprocating Compressor",
+ "icon": ".\\Compressors\\Reciprocating Compressor.png",
+ "class": "Compressors",
+ "object": "ReciprocatingCompressor",
+ "args": []
+ },
+ "Turbine": {
+ "name": "Turbine",
+ "icon": ".\\Compressors\\Turbine.png",
+ "class": "Compressors",
+ "object": "Turbine",
+ "args": []
}
}
} \ No newline at end of file
diff --git a/src/main/resources/base/svg/Compressors/Centrifugal Compressor.svg b/src/main/resources/base/svg/Compressors/Centrifugal Compressor.svg
new file mode 100644
index 0000000..15ae554
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Centrifugal Compressor.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ sodipodi:docname="Centrifugal Compressor.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ id="svg989"
+ version="1.1"
+ viewBox="0 0 39.831303 20.844073"
+ height="20.844072mm"
+ width="39.831303mm">
+ <defs
+ id="defs983">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4621"
+ id="linearGradient4623"
+ x1="552.6012"
+ y1="62.347649"
+ x2="557.84564"
+ y2="62.347649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-432.22912,85.871922)" />
+ <linearGradient
+ id="linearGradient4621"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4619" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-maximized="0"
+ inkscape:window-y="0"
+ inkscape:window-x="157"
+ inkscape:window-height="1020"
+ inkscape:window-width="1741"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="mm"
+ inkscape:cy="65.68083"
+ inkscape:cx="89.712248"
+ inkscape:zoom="3.959798"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata986">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-85.917679,-137.82627)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ id="g1606">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3798"
+ d="m 96.20808,137.99608 20.59969,5.19717 v 10.20535 l -20.59969,5.10268 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3800"
+ d="M 96.25532,145.63828 H 86.04997 v 5.10268 H 96.3498"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3802"
+ d="m 116.68966,148.22506 h 3.59077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3806"
+ d="m 102.64232,137.9183 v 1.68714"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3810"
+ d="m 110.9019,137.90158 v 3.9215"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient4623);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="145.73911"
+ x="120.37206"
+ height="4.9609375"
+ width="5.2444196"
+ id="rect3812" />
+ <text
+ id="text4627"
+ y="149.72087"
+ x="121.21709"
+ style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ xml:space="preserve"><tspan
+ style="font-size:4.23333px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="149.72087"
+ x="121.21709"
+ id="tspan4625"
+ sodipodi:role="line">M</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Compressors/Ejector Compressor.svg b/src/main/resources/base/svg/Compressors/Ejector Compressor.svg
new file mode 100644
index 0000000..cb345d1
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Ejector Compressor.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg983"
+ version="1.1"
+ viewBox="0 0 24.561319 6.5105553"
+ height="6.5105553mm"
+ width="24.561319mm">
+ <defs
+ id="defs977">
+ <linearGradient
+ xlink:href="#linearGradient5003"
+ id="linearGradient5005"
+ x1="523.9151"
+ y1="136.07031"
+ x2="530.93091"
+ y2="136.07031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9248707,0,0,0.9248707,-356.29188,11.161605)" />
+ <linearGradient
+ id="linearGradient5003"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5001" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata980">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-128.12939,-133.68995)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g1575">
+ <rect
+ y="133.95006"
+ x="128.26189"
+ height="6.1179466"
+ width="6.4887304"
+ id="rect4999"
+ style="fill:#ffffff;stroke:url(#linearGradient5005);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5007"
+ d="m 134.83292,138.79118 17.72492,1.07719 -0.0246,-6.03313 -17.72329,1.67043"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Compressors/Fan.svg b/src/main/resources/base/svg/Compressors/Fan.svg
new file mode 100644
index 0000000..b23a097
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Fan.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1609"
+ version="1.1"
+ viewBox="0 0 22.314726 10.768025"
+ height="10.768025mm"
+ width="22.314726mm">
+ <defs
+ id="defs1603">
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5021"
+ x1="526.4541"
+ y1="146.42702"
+ x2="537.41211"
+ y2="146.42702"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-217.02286,-18.174328)" />
+ <linearGradient
+ id="linearGradient5019"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5017" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5025"
+ gradientUnits="userSpaceOnUse"
+ x1="526.4541"
+ y1="146.42702"
+ x2="537.41211"
+ y2="146.42702"
+ gradientTransform="translate(-205.93117,-18.174328)" />
+ <linearGradient
+ xlink:href="#linearGradient5019"
+ id="linearGradient5035"
+ gradientUnits="userSpaceOnUse"
+ x1="550.97614"
+ y1="119.36598"
+ x2="555.65332"
+ y2="119.36598"
+ gradientTransform="translate(-232.85061,15.414093)" />
+ </defs>
+ <metadata
+ id="metadata1606">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-87.872402,-124.6398)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g5850"
+ transform="translate(-221.42632,-1.7097248)">
+ <ellipse
+ ry="1.7706606"
+ rx="5.4790258"
+ cy="128.25269"
+ cx="314.91025"
+ id="path5015"
+ style="fill:#ffffff;stroke:url(#linearGradient5021);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <ellipse
+ style="fill:#ffffff;stroke:url(#linearGradient5025);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="ellipse5023"
+ cx="326.00192"
+ cy="128.25269"
+ rx="5.4790258"
+ ry="1.7706606" />
+ <path
+ id="path5027"
+ d="m 320.45616,128.48655 v 4.00904"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient5035);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5029"
+ width="4.6772165"
+ height="4.4099469"
+ x="318.12555"
+ y="132.5751" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ x="318.94144"
+ y="136.06596"
+ id="text5033"><tspan
+ id="tspan5031"
+ x="318.94144"
+ y="136.06596"
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none">M</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Compressors/Positive Displacement Compressor.svg b/src/main/resources/base/svg/Compressors/Positive Displacement Compressor.svg
new file mode 100644
index 0000000..99802b2
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Positive Displacement Compressor.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1647"
+ version="1.1"
+ viewBox="0 0 19.206747 19.125592"
+ height="19.125591mm"
+ width="19.206747mm">
+ <defs
+ id="defs1641">
+ <linearGradient
+ xlink:href="#linearGradient4635"
+ id="linearGradient4637"
+ x1="532.47394"
+ y1="91.475433"
+ x2="540.97839"
+ y2="91.475433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-393.96549,71.734459)" />
+ <linearGradient
+ id="linearGradient4635"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4633" />
+ </linearGradient>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path4665"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)" />
+ </marker>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4668"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata1644">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-133.31128,-156.841)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g2332">
+ <path
+ id="path4629"
+ d="m 133.31128,173.98222 h 4.06326 v -17.00893 h 11.24479 l -0.0236,17.03255 3.9215,-0.0236"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ y="162.07596"
+ x="138.50845"
+ height="2.2678571"
+ width="8.5044641"
+ id="rect4631"
+ style="fill:#ffffff;stroke:url(#linearGradient4637);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path4639"
+ d="m 142.76069,164.43832 v 11.52827"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Compressors/Reciprocating Compressor.svg b/src/main/resources/base/svg/Compressors/Reciprocating Compressor.svg
new file mode 100644
index 0000000..521e144
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Reciprocating Compressor.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="Reciprocating Compressor.svg"
+ width="29.586315mm"
+ height="14.722171mm"
+ viewBox="0 0 29.586315 14.722171"
+ version="1.1"
+ id="svg2363">
+ <sodipodi:namedview
+ inkscape:current-layer="svg2363"
+ inkscape:window-maximized="1"
+ inkscape:window-y="-11"
+ inkscape:window-x="-11"
+ inkscape:cy="41.59944"
+ inkscape:cx="37.179616"
+ inkscape:zoom="4.7773942"
+ showgrid="false"
+ id="namedview17"
+ inkscape:window-height="986"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
+ <defs
+ id="defs2357">
+ <linearGradient
+ gradientTransform="translate(-526.19954,-108.91903)"
+ gradientUnits="userSpaceOnUse"
+ y2="119.36598"
+ x2="555.65332"
+ y1="119.36598"
+ x1="550.97614"
+ id="linearGradient4993"
+ xlink:href="#linearGradient4991" />
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient4991">
+ <stop
+ id="stop4989"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata2360">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="g862">
+ <path
+ id="path4975"
+ d="m 0.132291,7.03037 v 7.55951 h 21.54465 V 6.93587 h -7.55951 V 0.1323 h -7.08708 v 6.61458 h -6.89806 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path4985"
+ d="m 21.769811,10.48035 h 2.93995"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="8.2419739"
+ x="24.776596"
+ height="4.4099469"
+ width="4.6772165"
+ id="rect4987"
+ style="fill:#ffffff;stroke:url(#linearGradient4993);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <text
+ id="text4997"
+ y="11.732819"
+ x="25.592484"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="11.732819"
+ x="25.592484"
+ id="tspan4995">M</tspan></text>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Compressors/Turbine.svg b/src/main/resources/base/svg/Compressors/Turbine.svg
new file mode 100644
index 0000000..6383f61
--- /dev/null
+++ b/src/main/resources/base/svg/Compressors/Turbine.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg2245"
+ version="1.1"
+ viewBox="0 0 36.083744 21.067864"
+ height="21.067863mm"
+ width="36.083744mm">
+ <defs
+ id="defs2239">
+ <linearGradient
+ xlink:href="#linearGradient4991"
+ id="linearGradient5043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-479.53566,-43.473745)"
+ x1="550.97614"
+ y1="119.36598"
+ x2="555.65332"
+ y2="119.36598" />
+ <linearGradient
+ id="linearGradient4991"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4989" />
+ </linearGradient>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5089"
+ style="overflow:visible">
+ <path
+ id="path5087"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5055"
+ style="overflow:visible">
+ <path
+ id="path5053"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata2242">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-40.166464,-64.768355)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g2942">
+ <path
+ id="path5037"
+ d="m 61.76161,64.939784 -21.40111,5.59931 -0.0611,9.85655 21.42882,5.27186 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5039"
+ d="m 61.69806,75.864944 0.68965,0.0167 9.10387,0.006"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ y="73.687271"
+ x="71.440491"
+ height="4.4099469"
+ width="4.6772165"
+ id="rect5041"
+ style="fill:#ffffff;stroke:url(#linearGradient5043);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <text
+ id="text5047"
+ y="77.204559"
+ x="72.593079"
+ style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ y="77.204559"
+ x="72.593079"
+ id="tspan5045">T</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Pumps/Blowing Egg.svg b/src/main/resources/base/svg/Pumps/Blowing Egg.svg
new file mode 100644
index 0000000..979d6b9
--- /dev/null
+++ b/src/main/resources/base/svg/Pumps/Blowing Egg.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg2583"
+ version="1.1"
+ viewBox="0 0 17.305714 29.969846"
+ height="29.969847mm"
+ width="17.305714mm">
+ <defs
+ id="defs2577">
+ <linearGradient
+ xlink:href="#linearGradient5861"
+ id="linearGradient5865"
+ x1="1699.6428"
+ y1="1254.1479"
+ x2="1726.0714"
+ y2="1254.1479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.26458333,0,0,0.26458333,-359.79039,-273.72822)" />
+ <linearGradient
+ id="linearGradient5861"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5863" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata2580">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-84.852406,-54.564329)"
+ id="layer1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 84.993076,67.358829 16.914444,0.09448 c 0.28856,3.191443 0.0481,6.430099 -0.70871,9.543917 -0.42843,1.762803 -1.04634,3.530892 -2.220626,4.913675 -0.890182,1.04824 -2.085962,1.838262 -3.406354,2.222704 -1.320392,0.384442 -2.760839,0.358299 -4.058653,-0.09657 -1.201743,-0.4212 -2.262652,-1.196857 -3.111677,-2.145937 -0.849025,-0.94908 -1.49338,-2.068055 -1.990998,-3.24022 -0.588466,-1.386161 -0.978039,-2.854608 -1.181179,-4.346744 -0.312717,-2.297019 -0.236247,-4.627089 -0.236247,-6.945297 z"
+ id="path5845" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 93.592037,61.651708 v 9.222037 1.795388 3.312258"
+ id="path5853" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient5865);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect5859"
+ width="6.9925594"
+ height="6.8035712"
+ x="89.906731"
+ y="54.696621" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:3.175px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ x="90.833389"
+ y="60.268333"
+ id="text5867"><tspan
+ style="font-size:5.95312px;line-height:1.25;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="tspan5869"
+ x="90.833389"
+ y="60.268333">M</tspan></text>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Pumps/Duplex Pump.svg b/src/main/resources/base/svg/Pumps/Duplex Pump.svg
index 7557711..d499cc7 100644
--- a/src/main/resources/base/svg/Pumps/Duplex Pump.svg
+++ b/src/main/resources/base/svg/Pumps/Duplex Pump.svg
@@ -7,39 +7,63 @@
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
- id="svg5576"
- version="1.1"
- viewBox="0 0 21.156015 22.703859"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="Duplex Pump.svg"
+ width="21.156015mm"
height="22.703859mm"
- width="21.156015mm">
+ viewBox="0 0 21.156015 22.703859"
+ version="1.1"
+ id="svg5576">
+ <sodipodi:namedview
+ inkscape:current-layer="svg5576"
+ inkscape:window-maximized="1"
+ inkscape:window-y="-9"
+ inkscape:window-x="-9"
+ inkscape:cy="42.904931"
+ inkscape:cx="39.979872"
+ inkscape:zoom="9.812392"
+ showgrid="false"
+ id="namedview20"
+ inkscape:window-height="1013"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
<defs
id="defs5570">
<linearGradient
- xlink:href="#linearGradient4926"
- id="linearGradient5047"
- x1="2331.7856"
- y1="280.57645"
- x2="2365.7141"
- y2="280.57645"
+ gradientTransform="matrix(0.26458333,0,0,0.26458333,-612.68758,-69.39463)"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.26458333,0,0,0.26458333,-547.69335,-4.3953684)" />
+ y2="280.57645"
+ x2="2365.7141"
+ y1="280.57645"
+ x1="2331.7856"
+ id="linearGradient5047"
+ xlink:href="#linearGradient4926" />
<linearGradient
- id="linearGradient4926"
- osb:paint="solid">
+ osb:paint="solid"
+ id="linearGradient4926">
<stop
- style="stop-color:#000000;stop-opacity:1;"
+ id="stop4924"
offset="0"
- id="stop4924" />
+ style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
<linearGradient
- xlink:href="#linearGradient4926"
- id="linearGradient5051"
- gradientUnits="userSpaceOnUse"
- x1="2331.7856"
- y1="280.57645"
- x2="2365.7141"
+ gradientTransform="matrix(0.73140497,0,0,0.73140497,-702.68351,233.03624)"
y2="280.57645"
- gradientTransform="matrix(0.73140497,0,0,0.73140497,-702.68351,233.03624)" />
+ x2="2365.7141"
+ y1="280.57645"
+ x1="2331.7856"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5051"
+ xlink:href="#linearGradient4926" />
</defs>
<metadata
id="metadata5573">
@@ -49,60 +73,56 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
- transform="translate(-64.994234,-64.999262)"
- id="layer1">
+ id="g873">
+ <rect
+ y="0.39999947"
+ x="4.2640209"
+ height="8.8824406"
+ width="8.9769344"
+ id="rect5041"
+ style="fill:none;stroke:url(#linearGradient5047);stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none" />
<g
- id="g6206">
+ style="stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="matrix(0.26458333,0,0,0.26458333,-259.85352,-96.898438)"
+ id="g5609">
<rect
- y="65.399261"
- x="69.258255"
- height="8.8824406"
- width="8.9769344"
- id="rect5041"
- style="fill:#ffffff;stroke:url(#linearGradient5047);stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none" />
- <g
- style="stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none"
- transform="matrix(0.26458333,0,0,0.26458333,-194.85929,-31.899176)"
- id="g5609">
- <rect
- y="425.97406"
- x="1002.7961"
- height="24.554312"
- width="24.815525"
- id="rect5049"
- style="fill:#ffffff;stroke:url(#linearGradient5051);stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none" />
- <text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.02362;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ y="425.97406"
+ x="1002.7961"
+ height="24.554312"
+ width="24.815525"
+ id="rect5049"
+ style="fill:#ffffff;stroke:url(#linearGradient5051);stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.02362;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="1005.492"
+ y="446.45251"
+ id="text5053"><tspan
+ id="tspan5055"
x="1005.492"
y="446.45251"
- id="text5053"><tspan
- id="tspan5055"
- x="1005.492"
- y="446.45251"
- style="font-size:22.5px;line-height:1.25;stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none">M</tspan></text>
- </g>
- <path
- id="path5057"
- d="m 73.735737,74.294235 0.02196,6.52009"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path5061"
- d="m 69.163787,67.667124 -4.169553,3e-6"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path5069"
- d="m 78.18796,72.037475 7.961101,0.02363"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 78.18796,69.840481 H 69.541763"
- id="path6185" />
+ style="font-size:22.5px;line-height:1.25;stroke-width:3.02362;stroke-miterlimit:4;stroke-dasharray:none">M</tspan></text>
</g>
+ <path
+ id="path5057"
+ d="m 8.741503,9.294973 0.02196,6.52009"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5061"
+ d="M 4.169553,2.667862 0,2.667865"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5069"
+ d="m 13.193726,7.038213 7.961101,0.02363"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.799999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 13.193726,4.841219 H 4.547529"
+ id="path6185" />
</g>
</svg>
diff --git a/src/main/resources/base/svg/Pumps/Ejector(Vapor Service).svg b/src/main/resources/base/svg/Pumps/Ejector(Vapor Service).svg
new file mode 100644
index 0000000..4278349
--- /dev/null
+++ b/src/main/resources/base/svg/Pumps/Ejector(Vapor Service).svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1787"
+ version="1.1"
+ viewBox="0 0 24.810347 8.6835726"
+ height="8.6835728mm"
+ width="24.810347mm">
+ <defs
+ id="defs1781">
+ <linearGradient
+ xlink:href="#linearGradient5705"
+ id="linearGradient5709"
+ x1="1690.2378"
+ y1="1199.0868"
+ x2="1722.8152"
+ y2="1199.0868"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.26458333,0,0,0.26458333,-365.65909,-227.61964)" />
+ <linearGradient
+ id="linearGradient5705"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5707" />
+ </linearGradient>
+ <marker
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5787"
+ style="overflow:visible">
+ <path
+ id="path5789"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata1784">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-81.417353,-85.296953)"
+ id="layer1">
+ <g
+ style="stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g2555">
+ <rect
+ y="85.429245"
+ x="81.549644"
+ height="8.4189901"
+ width="8.619442"
+ id="rect5703"
+ style="fill:#ffffff;stroke:url(#linearGradient5709);stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5711"
+ d="m 90.265083,87.506497 15.800627,-1.403165 0.0291,6.96454 -15.864791,-1.218239"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/svg/Pumps/Hand Pump with Drum.svg b/src/main/resources/base/svg/Pumps/Hand Pump with Drum.svg
new file mode 100644
index 0000000..8c7815c
--- /dev/null
+++ b/src/main/resources/base/svg/Pumps/Hand Pump with Drum.svg
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ 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"
+ id="svg1100"
+ version="1.1"
+ viewBox="0 0 24.476313 41.759747"
+ height="41.759747mm"
+ width="24.476313mm">
+ <defs
+ id="defs1094">
+ <linearGradient
+ xlink:href="#linearGradient5649"
+ id="linearGradient5653"
+ x1="1673.3177"
+ y1="1038.22"
+ x2="1753.1198"
+ y2="1038.22"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1145.1469,-614.50132)" />
+ <linearGradient
+ id="linearGradient5649"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5651" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient5649"
+ id="linearGradient5657"
+ gradientUnits="userSpaceOnUse"
+ x1="1673.3177"
+ y1="1038.22"
+ x2="1753.1198"
+ y2="1038.22"
+ gradientTransform="translate(-1145.1469,-525.2156)" />
+ <linearGradient
+ xlink:href="#linearGradient5649"
+ id="linearGradient5677"
+ x1="1693.2144"
+ y1="994.12213"
+ x2="1732.1429"
+ y2="994.12213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1145.1469,-614.50132)" />
+ <linearGradient
+ xlink:href="#linearGradient5649"
+ id="linearGradient5669"
+ x1="1703.2144"
+ y1="993.79803"
+ x2="1721.4287"
+ y2="993.79803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1144.7898,-614.17722)" />
+ </defs>
+ <metadata
+ id="metadata1097">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-42.190415,-100.82846)"
+ id="layer1">
+ <g
+ style="stroke-width:3.02362209;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="matrix(0.26458333,0,0,0.26458333,-95.779264,5.5207753)"
+ id="g1048">
+ <path
+ id="path5643"
+ d="m 535.38881,427.53525 -0.022,18.23668 c -1.83948,0.12066 -3.61822,0.99563 -4.8365,2.37911 -1.21829,1.38348 -1.86127,3.2586 -1.7483,5.09857 0.10422,1.69748 0.84664,3.34822 2.04747,4.5525 1.20084,1.20428 2.84946,1.95141 4.54663,2.06048 l -0.074,15.01141 c -1.52323,0.28395 -2.96225,1.0059 -4.1005,2.05721 -0.76252,0.70428 -1.3932,1.55768 -1.80042,2.51247 -0.40723,0.95479 -0.58691,2.01175 -0.47248,3.04343 0.16495,1.48721 0.95889,2.89436 2.14658,3.80452 1.18768,0.91017 2.75288,1.3109 4.23182,1.08346 l -0.049,20.50783"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="rect5647"
+ d="m 528.16991,419.17323 v 9.0918 h 79.8028 v -9.0918 z"
+ style="fill:#ffffff;stroke:url(#linearGradient5653);stroke-width:3.02362209;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ style="fill:#ffffff;stroke:url(#linearGradient5657);stroke-width:3.02362209;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5655"
+ width="79.802048"
+ height="9.0913725"
+ x="528.17078"
+ y="508.45877" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 600.65731,508.38083 -0.063,-18.3821 c 1.82514,-0.17083 3.57086,-1.07742 4.76038,-2.47218 1.18952,-1.39476 1.80921,-3.26169 1.68982,-5.09092 -0.10941,-1.67633 -0.83429,-3.30564 -2.00617,-4.50928 -1.17187,-1.20364 -2.78123,-1.97183 -4.45403,-2.12602 l 0.029,-14.8552 c 1.4981,-0.36204 2.89704,-1.1262 4.0112,-2.1911 0.74874,-0.71564 1.37206,-1.56916 1.77975,-2.52128 0.4077,-0.95212 0.59569,-2.00397 0.49315,-3.03462 -0.14735,-1.48096 -0.91228,-2.89078 -2.07353,-3.82162 -1.16124,-0.93085 -2.70373,-1.37065 -4.18127,-1.19218 l 0.052,-20.4479"
+ id="path5659" />
+ <ellipse
+ ry="18.902796"
+ rx="19.464285"
+ cy="379.62082"
+ cx="567.53162"
+ id="path5671"
+ style="fill:#ffffff;stroke:url(#linearGradient5677);stroke-width:3.02362209;stroke-miterlimit:4;stroke-dasharray:none" />
+ <ellipse
+ ry="9.2930031"
+ rx="9.1071424"
+ cy="379.62082"
+ cx="567.53162"
+ id="path5663"
+ style="fill:#ffffff;stroke:url(#linearGradient5669);stroke-width:3.02362209;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5679"
+ d="m 572.71851,387.40794 28.6037,-25.59276"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5685"
+ d="m 528.55981,452.94317 77.6154,0.0631"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 529.02131,482.1467 77.5674,0.0444"
+ id="path5687" />
+ <path
+ id="path5689"
+ d="m 521.63881,399.53118 h 6.9643 v 12.1428 h -7.1429"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5691"
+ d="m 528.78171,405.60261 h 10 v 13.0357"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 613.79051,399.55734 h -6.9643 v 12.1428 h 7.1429"
+ id="path5699" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 607.31731,405.66483 h -10 v 13.0357"
+ id="path5701" />
+ <g
+ transform="matrix(1,0,0,0.70619992,-623.90819,326.37134)"
+ style="fill:none;stroke-width:3.59802086;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g5877">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.59802086;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 1196.0346,143.78602 V 245.11635"
+ id="path5681" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.59802086;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1187.9841,143.71237 -10e-5,101.39285"
+ id="path5683" />
+ </g>
+ <path
+ id="path5894"
+ d="m 564.03121,419.17304 v -21.2132"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path5896"
+ d="M 572.23871,418.79423 V 397.95984"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ id="path1027"
+ d="M 548.07611,379.7419 H 525.28674"
+ style="fill:none;stroke:#000000;stroke-width:3.02362209;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/src/main/resources/base/toolbar/Compressors/Centrifugal Compressor.png b/src/main/resources/base/toolbar/Compressors/Centrifugal Compressor.png
new file mode 100644
index 0000000..0dd5c81
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Centrifugal Compressor.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Compressors/Ejector Compressor.png b/src/main/resources/base/toolbar/Compressors/Ejector Compressor.png
new file mode 100644
index 0000000..2401524
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Ejector Compressor.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Compressors/Fan.png b/src/main/resources/base/toolbar/Compressors/Fan.png
new file mode 100644
index 0000000..44ee063
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Fan.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Compressors/Positive Displacement Compressor.png b/src/main/resources/base/toolbar/Compressors/Positive Displacement Compressor.png
new file mode 100644
index 0000000..f7e6e8e
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Positive Displacement Compressor.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Compressors/Reciprocating Compressor.png b/src/main/resources/base/toolbar/Compressors/Reciprocating Compressor.png
new file mode 100644
index 0000000..781f722
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Reciprocating Compressor.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Compressors/Turbine.png b/src/main/resources/base/toolbar/Compressors/Turbine.png
new file mode 100644
index 0000000..795cc90
--- /dev/null
+++ b/src/main/resources/base/toolbar/Compressors/Turbine.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Piping/Inflow Line.png b/src/main/resources/base/toolbar/Piping/Inflow Line.png
index eee1712..7e5356d 100644
--- a/src/main/resources/base/toolbar/Piping/Inflow Line.png
+++ b/src/main/resources/base/toolbar/Piping/Inflow Line.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Piping/Outflow Line.png b/src/main/resources/base/toolbar/Piping/Outflow Line.png
index 1d69427..84d1645 100644
--- a/src/main/resources/base/toolbar/Piping/Outflow Line.png
+++ b/src/main/resources/base/toolbar/Piping/Outflow Line.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Blowing Egg.png b/src/main/resources/base/toolbar/Pumps/Blowing Egg.png
new file mode 100644
index 0000000..87118a4
--- /dev/null
+++ b/src/main/resources/base/toolbar/Pumps/Blowing Egg.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Duplex Pump.png b/src/main/resources/base/toolbar/Pumps/Duplex Pump.png
index 50ba6a4..b2ee84b 100644
--- a/src/main/resources/base/toolbar/Pumps/Duplex Pump.png
+++ b/src/main/resources/base/toolbar/Pumps/Duplex Pump.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Ejector(Vapor Service).png b/src/main/resources/base/toolbar/Pumps/Ejector(Vapor Service).png
new file mode 100644
index 0000000..e317698
--- /dev/null
+++ b/src/main/resources/base/toolbar/Pumps/Ejector(Vapor Service).png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Hand Pump with Drum.png b/src/main/resources/base/toolbar/Pumps/Hand Pump with Drum.png
new file mode 100644
index 0000000..a183826
--- /dev/null
+++ b/src/main/resources/base/toolbar/Pumps/Hand Pump with Drum.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Plunger Pump.png b/src/main/resources/base/toolbar/Pumps/Plunger Pump.png
index ea202cd..c6dc484 100644
--- a/src/main/resources/base/toolbar/Pumps/Plunger Pump.png
+++ b/src/main/resources/base/toolbar/Pumps/Plunger Pump.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Proportioning Pump.png b/src/main/resources/base/toolbar/Pumps/Proportioning Pump.png
index cf23409..c00c923 100644
--- a/src/main/resources/base/toolbar/Pumps/Proportioning Pump.png
+++ b/src/main/resources/base/toolbar/Pumps/Proportioning Pump.png
Binary files differ
diff --git a/src/main/resources/base/toolbar/Pumps/Reciprocating Pump.png b/src/main/resources/base/toolbar/Pumps/Reciprocating Pump.png
index a697be3..de8155e 100644
--- a/src/main/resources/base/toolbar/Pumps/Reciprocating Pump.png
+++ b/src/main/resources/base/toolbar/Pumps/Reciprocating Pump.png
Binary files differ