Merge branch 'master' into bugfix/path-tag-dressup-issue
@@ -776,9 +776,8 @@ Document* Application::openDocumentPrivate(const char * FileName,
|
||||
|
||||
if(!isMainDoc)
|
||||
return 0;
|
||||
std::stringstream str;
|
||||
str << "The project '" << FileName << "' is already open!";
|
||||
throw Base::FileSystemError(str.str().c_str());
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
std::string name;
|
||||
|
||||
@@ -518,18 +518,34 @@ void Application::open(const char* FileName, const char* Module)
|
||||
|
||||
if (Module != 0) {
|
||||
try {
|
||||
// issue module loading
|
||||
Command::doCommand(Command::App, "import %s", Module);
|
||||
if(File.hasExtension("FCStd")) {
|
||||
bool handled = false;
|
||||
std::string filepath = File.filePath();
|
||||
for(auto &v : d->documents) {
|
||||
auto doc = v.second->getDocument();
|
||||
std::string fi = Base::FileInfo(doc->FileName.getValue()).filePath();
|
||||
if(filepath == fi) {
|
||||
handled = true;
|
||||
Command::doCommand(Command::App, "FreeCADGui.reload('%s')", doc->getName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!handled)
|
||||
Command::doCommand(Command::App, "FreeCAD.openDocument('%s')", FileName);
|
||||
} else {
|
||||
// issue module loading
|
||||
Command::doCommand(Command::App, "import %s", Module);
|
||||
|
||||
// load the file with the module
|
||||
Command::doCommand(Command::App, "%s.open(u\"%s\")", Module, unicodepath.c_str());
|
||||
// load the file with the module
|
||||
Command::doCommand(Command::App, "%s.open(u\"%s\")", Module, unicodepath.c_str());
|
||||
|
||||
// ViewFit
|
||||
if (!File.hasExtension("FCStd") && sendHasMsgToActiveView("ViewFit")) {
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath
|
||||
("User parameter:BaseApp/Preferences/View");
|
||||
if (hGrp->GetBool("AutoFitToView", true))
|
||||
Command::doCommand(Command::Gui, "Gui.SendMsgToActiveView(\"ViewFit\")");
|
||||
// ViewFit
|
||||
if (sendHasMsgToActiveView("ViewFit")) {
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath
|
||||
("User parameter:BaseApp/Preferences/View");
|
||||
if (hGrp->GetBool("AutoFitToView", true))
|
||||
Command::doCommand(Command::Gui, "Gui.SendMsgToActiveView(\"ViewFit\")");
|
||||
}
|
||||
}
|
||||
|
||||
// the original file name is required
|
||||
@@ -2266,6 +2282,17 @@ App::Document *Application::reopen(App::Document *doc) {
|
||||
|| d->testStatus(App::Document::PartialRestore) )
|
||||
docs.push_back(d->FileName.getValue());
|
||||
}
|
||||
|
||||
if(docs.empty()) {
|
||||
Document *gdoc = getDocument(doc);
|
||||
if(gdoc) {
|
||||
setActiveDocument(gdoc);
|
||||
if(!gdoc->setActiveView())
|
||||
gdoc->setActiveView(0,View3DInventor::getClassTypeId());
|
||||
}
|
||||
return doc;
|
||||
}
|
||||
|
||||
for(auto &file : docs)
|
||||
App::GetApplication().openDocument(file.c_str(),false);
|
||||
}
|
||||
|
||||
@@ -264,7 +264,8 @@ public:
|
||||
static PyObject* sOpen (PyObject *self,PyObject *args); // open Python scripts
|
||||
static PyObject* sInsert (PyObject *self,PyObject *args); // open Python scripts
|
||||
static PyObject* sExport (PyObject *self,PyObject *args);
|
||||
static PyObject* sReload (PyObject *self,PyObject *args);
|
||||
static PyObject* sReload (PyObject *self,PyObject *args); // reload FCStd file
|
||||
static PyObject* sLoadFile (PyObject *self,PyObject *args); // open all types of files
|
||||
|
||||
static PyObject* sCoinRemoveAllChildren (PyObject *self,PyObject *args);
|
||||
|
||||
|
||||
@@ -218,6 +218,13 @@ PyMethodDef Application::Methods[] = {
|
||||
"reload(name) -> doc\n\n"
|
||||
"Reload a partial opened document"},
|
||||
|
||||
{"loadFile", (PyCFunction) Application::sLoadFile, METH_VARARGS,
|
||||
"loadFile(string=filename,[string=module]) -> None\n\n"
|
||||
"Loads an arbitrary file by delegating to the given Python module:\n"
|
||||
"* If no module is given it will be determined by the file extension.\n"
|
||||
"* If more than one module can load a file the first one one will be taken.\n"
|
||||
"* If no module exists to load the file an exception will be raised."},
|
||||
|
||||
{"coinRemoveAllChildren", (PyCFunction) Application::sCoinRemoveAllChildren, METH_VARARGS,
|
||||
"Remove all children from a group node"},
|
||||
|
||||
@@ -1470,6 +1477,37 @@ PyObject* Application::sReload(PyObject * /*self*/, PyObject *args)
|
||||
Py_Return;
|
||||
}
|
||||
|
||||
PyObject* Application::sLoadFile(PyObject * /*self*/, PyObject *args)
|
||||
{
|
||||
char *path, *mod="";
|
||||
if (!PyArg_ParseTuple(args, "s|s", &path, &mod)) // convert args: Python->C
|
||||
return 0; // NULL triggers exception
|
||||
PY_TRY {
|
||||
Base::FileInfo fi(path);
|
||||
if (!fi.isFile() || !fi.exists()) {
|
||||
PyErr_Format(PyExc_IOError, "File %s doesn't exist.", path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string module = mod;
|
||||
if (module.empty()) {
|
||||
std::string ext = fi.extension();
|
||||
std::vector<std::string> modules = App::GetApplication().getImportModules(ext.c_str());
|
||||
if (modules.empty()) {
|
||||
PyErr_Format(PyExc_IOError, "Filetype %s is not supported.", ext.c_str());
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
module = modules.front();
|
||||
}
|
||||
}
|
||||
|
||||
Application::Instance->open(path,mod);
|
||||
|
||||
Py_Return;
|
||||
} PY_CATCH
|
||||
}
|
||||
|
||||
PyObject* Application::sAddDocObserver(PyObject * /*self*/, PyObject *args)
|
||||
{
|
||||
PyObject* o;
|
||||
|
||||
@@ -111,6 +111,63 @@ bool StdCmdRandomColor::isActive(void)
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// Std_SendToPythonConsole
|
||||
//===========================================================================
|
||||
|
||||
DEF_STD_CMD_A(StdCmdSendToPythonConsole)
|
||||
|
||||
StdCmdSendToPythonConsole::StdCmdSendToPythonConsole()
|
||||
:Command("Std_SendToPythonConsole")
|
||||
{
|
||||
// setting the
|
||||
sGroup = QT_TR_NOOP("Edit");
|
||||
sMenuText = QT_TR_NOOP("&Send to Python Console");
|
||||
sToolTipText = QT_TR_NOOP("Sends the selected object to the Python console");
|
||||
sWhatsThis = "Std_SendToPythonConsole";
|
||||
sStatusTip = QT_TR_NOOP("Sends the selected object to the Python console");
|
||||
sPixmap = "applications-python";
|
||||
sAccel = "Ctrl+Shift+P";
|
||||
}
|
||||
|
||||
bool StdCmdSendToPythonConsole::isActive(void)
|
||||
{
|
||||
return (Gui::Selection().size() == 1);
|
||||
}
|
||||
|
||||
void StdCmdSendToPythonConsole::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
|
||||
const std::vector<Gui::SelectionObject> &sels = Gui::Selection().getSelectionEx("*",App::DocumentObject::getClassTypeId(),true,true);
|
||||
if (sels.empty())
|
||||
return;
|
||||
const App::DocumentObject *obj = sels[0].getObject();
|
||||
QString docname = QString::fromLatin1(obj->getDocument()->getName());
|
||||
QString objname = QString::fromLatin1(obj->getNameInDocument());
|
||||
try {
|
||||
QString cmd = QString::fromLatin1("obj = App.getDocument(\"%1\").getObject(\"%2\")").arg(docname,objname);
|
||||
Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1());
|
||||
if (sels[0].hasSubNames()) {
|
||||
std::vector<std::string> subnames = sels[0].getSubNames();
|
||||
if (obj->getPropertyByName("Shape")) {
|
||||
QString subname = QString::fromLatin1(subnames[0].c_str());
|
||||
cmd = QString::fromLatin1("shp = App.getDocument(\"%1\").getObject(\"%2\").Shape")
|
||||
.arg(docname, objname);
|
||||
Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1());
|
||||
cmd = QString::fromLatin1("elt = App.getDocument(\"%1\").getObject(\"%2\").Shape.%4")
|
||||
.arg(docname,objname,subname);
|
||||
Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
e.ReportException();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
namespace Gui {
|
||||
|
||||
void CreateFeatCommands(void)
|
||||
@@ -119,6 +176,7 @@ void CreateFeatCommands(void)
|
||||
|
||||
rcCmdMgr.addCommand(new StdCmdFeatRecompute());
|
||||
rcCmdMgr.addCommand(new StdCmdRandomColor());
|
||||
rcCmdMgr.addCommand(new StdCmdSendToPythonConsole());
|
||||
}
|
||||
|
||||
} // namespace Gui
|
||||
|
||||
@@ -312,7 +312,9 @@ NaviCubeImplementation::NaviCubeImplementation(
|
||||
m_HiliteColor = QColor(170,226,247);
|
||||
m_ButtonColor = QColor(226,233,239,128);
|
||||
m_PickingFramebuffer = NULL;
|
||||
m_CubeWidgetSize = 132;
|
||||
|
||||
m_CubeWidgetSize = (App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("View")->GetInt("NaviWidgetSize", 132));
|
||||
|
||||
m_Menu = createNaviCubeMenu();
|
||||
}
|
||||
@@ -372,7 +374,8 @@ GLuint NaviCubeImplementation::createCubeFaceTex(QtGLWidget* gl, float gap, floa
|
||||
if (text) {
|
||||
paint.setPen(Qt::white);
|
||||
QFont sansFont(str("Helvetica"), 0.18 * texSize);
|
||||
sansFont.setStretch(QFont::ExtraCondensed);
|
||||
sansFont.setStretch(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetInt("NaviFontStretch", 62));
|
||||
paint.setFont(sansFont);
|
||||
paint.drawText(QRect(0, 0, texSize, texSize), Qt::AlignCenter,qApp->translate("Gui::NaviCube",text));
|
||||
}
|
||||
@@ -677,12 +680,18 @@ void NaviCubeImplementation::initNaviCube(QtGLWidget* gl) {
|
||||
|
||||
if (labels.size() != 6) {
|
||||
labels.clear();
|
||||
labels.push_back("FRONT");
|
||||
labels.push_back("REAR");
|
||||
labels.push_back("TOP");
|
||||
labels.push_back("BOTTOM");
|
||||
labels.push_back("RIGHT");
|
||||
labels.push_back("LEFT");
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextFront", "FRONT"));
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextRear", "REAR"));
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextTop", "TOP"));
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextBottom", "BOTTOM"));
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextRight", "RIGHT"));
|
||||
labels.push_back(App::GetApplication().GetUserParameter().GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")->GetGroup("View")->GetASCII("NaviTextLeft", "LEFT"));
|
||||
}
|
||||
|
||||
float gap = 0.12f;
|
||||
|
||||
@@ -495,7 +495,8 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const
|
||||
if (Gui::Selection().countObjectsOfType(App::DocumentObject::getClassTypeId()) > 0) {
|
||||
*item << "Separator" << "Std_SetAppearance" << "Std_ToggleVisibility"
|
||||
<< "Std_ToggleSelectability" << "Std_TreeSelection"
|
||||
<< "Std_RandomColor" << "Separator" << "Std_Delete";
|
||||
<< "Std_RandomColor" << "Separator" << "Std_Delete"
|
||||
<< "Std_SendToPythonConsole";
|
||||
}
|
||||
}
|
||||
else if (strcmp(recipient,"Tree") == 0)
|
||||
@@ -504,7 +505,8 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const
|
||||
*item << "Std_ToggleVisibility" << "Std_ShowSelection" << "Std_HideSelection"
|
||||
<< "Std_ToggleSelectability" << "Std_TreeSelectAllInstances" << "Separator"
|
||||
<< "Std_SetAppearance" << "Std_RandomColor" << "Separator"
|
||||
<< "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_Delete" << "Separator";
|
||||
<< "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_Delete"
|
||||
<< "Std_SendToPythonConsole" << "Separator";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -534,7 +536,8 @@ MenuItem* StdWorkbench::setupMenuBar() const
|
||||
edit->setCommand("&Edit");
|
||||
*edit << "Std_Undo" << "Std_Redo" << "Separator" << "Std_Cut" << "Std_Copy"
|
||||
<< "Std_Paste" << "Std_DuplicateSelection" << "Separator"
|
||||
<< "Std_Refresh" << "Std_BoxSelection" << "Std_BoxElementSelection" << "Std_SelectAll" << "Std_Delete"
|
||||
<< "Std_Refresh" << "Std_BoxSelection" << "Std_BoxElementSelection"
|
||||
<< "Std_SelectAll" << "Std_Delete" << "Std_SendToPythonConsole"
|
||||
<< "Separator" << "Std_Placement" /*<< "Std_TransformManip"*/ << "Std_Alignment"
|
||||
<< "Std_Edit" << "Separator" << "Std_DlgPreferences";
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@ class CommandAddonManager:
|
||||
self.dialog.buttonInstall.setIcon(QtGui.QIcon.fromTheme("download",QtGui.QIcon(":/icons/edit_OK.svg")))
|
||||
self.dialog.buttonUpdateAll.setIcon(QtGui.QIcon(":/icons/button_valid.svg"))
|
||||
self.dialog.buttonConfigure.setIcon(QtGui.QIcon(":/icons/preferences-system.svg"))
|
||||
self.dialog.buttonClose.setIcon(QtGui.QIcon.fromTheme("close",QtGui.QIcon(":/icons/process-stop.svg")))
|
||||
self.dialog.tabWidget.setTabIcon(0,QtGui.QIcon.fromTheme("folder",QtGui.QIcon(":/icons/folder.svg")))
|
||||
self.dialog.tabWidget.setTabIcon(1,QtGui.QIcon(":/icons/applications-python.svg"))
|
||||
|
||||
@@ -143,6 +144,7 @@ class CommandAddonManager:
|
||||
self.dialog.tabWidget.currentChanged.connect(self.switchtab)
|
||||
self.dialog.listMacros.currentRowChanged.connect(self.show_macro)
|
||||
self.dialog.buttonConfigure.clicked.connect(self.show_config)
|
||||
self.dialog.buttonClose.clicked.connect(self.dialog.reject)
|
||||
|
||||
# allow to open links in browser
|
||||
self.dialog.description.setOpenLinks(True)
|
||||
@@ -274,7 +276,11 @@ class CommandAddonManager:
|
||||
|
||||
import AddonManager_rc
|
||||
from PySide import QtGui
|
||||
addonicon = QtGui.QIcon(":/icons/" + repo + "_workbench_icon.svg")
|
||||
path = ":/icons/" + repo + "_workbench_icon.svg"
|
||||
if QtCore.QFile.exists(path):
|
||||
addonicon = QtGui.QIcon(path)
|
||||
else:
|
||||
addonicon = QtGui.QIcon(":/icons/document-package.svg")
|
||||
if addonicon.isNull():
|
||||
addonicon = QtGui.QIcon(":/icons/document-package.svg")
|
||||
return addonicon
|
||||
|
||||
@@ -151,6 +151,19 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonClose">
|
||||
<property name="toolTip">
|
||||
<string>Close the addons manager</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Close</string>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
@@ -410,6 +410,7 @@ def getColorFromStyledItem(styled_item):
|
||||
if rgb_color is not None:
|
||||
col = [rgb_color.Red, rgb_color.Green, rgb_color.Blue]
|
||||
col.append(int(transparency) if transparency else 0)
|
||||
col = tuple(col)
|
||||
# print(col)
|
||||
else:
|
||||
col = None
|
||||
|
||||
@@ -211,14 +211,22 @@ class DraftTaskPanel:
|
||||
return False
|
||||
|
||||
class DraftToolBar:
|
||||
"""main draft Toolbar"""
|
||||
"""The Draft Task panel UI
|
||||
Draft Toolbar is the main ui of the Draft Module. Once displayed as a
|
||||
toolbar, now it define the ui of the Task Panel.
|
||||
Toolbar become obsolete due to lack of manteinence and was disabled
|
||||
by default in February 2020.
|
||||
Draft Ui Commands call and get information such as point coordinates,
|
||||
subcommands activation, continue mode, etc. from Task Panel Ui
|
||||
"""
|
||||
def __init__(self):
|
||||
self.tray = None
|
||||
self.sourceCmd = None
|
||||
self.cancel = None
|
||||
self.pointcallback = None
|
||||
self.taskmode = Draft.getParam("UiMode",1)
|
||||
#print("taskmode: ",str(self.taskmode))
|
||||
self.taskmode = 1 # Draft.getParam("UiMode",1)
|
||||
# taskmode = 0 was used by draft toolbar that is now obsolete.
|
||||
# print("taskmode: ",str(self.taskmode))
|
||||
self.paramcolor = Draft.getParam("color",255)>>8
|
||||
self.color = QtGui.QColor(self.paramcolor)
|
||||
self.facecolor = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/View").GetUnsigned("DefaultShapeColor",4294967295)>>8
|
||||
@@ -262,7 +270,7 @@ class DraftToolBar:
|
||||
self.tray.setParent(mw)
|
||||
self.tray.hide()
|
||||
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
# create the draft Toolbar
|
||||
self.draftWidget = QtGui.QDockWidget()
|
||||
self.baseWidget = DraftDockWidget()
|
||||
@@ -349,6 +357,7 @@ class DraftToolBar:
|
||||
if not width:
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
inputfield.setSizePolicy(sizePolicy)
|
||||
inputfield.setMinimumWidth(110)
|
||||
else:
|
||||
inputfield.setMaximumWidth(width)
|
||||
layout.addWidget(inputfield)
|
||||
@@ -509,6 +518,7 @@ class DraftToolBar:
|
||||
|
||||
# spacer
|
||||
if not self.taskmode:
|
||||
# self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
|
||||
QtGui.QSizePolicy.Minimum)
|
||||
else:
|
||||
@@ -753,7 +763,7 @@ class DraftToolBar:
|
||||
self.retranslateUi(self.baseWidget)
|
||||
self.panel = DraftTaskPanel(self.baseWidget,extra)
|
||||
todo.delay(FreeCADGui.Control.showDialog,self.panel)
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
# create a dummy task to block the UI during the works
|
||||
class dummy:
|
||||
"""an empty dialog"""
|
||||
@@ -945,7 +955,7 @@ class DraftToolBar:
|
||||
if self.taskmode:
|
||||
self.isTaskOn = False
|
||||
self.baseWidget = QtGui.QWidget()
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.setTitle(translate("draft", "None"))
|
||||
self.labelx.setText(translate("draft", "X"))
|
||||
self.hideXYZ()
|
||||
@@ -1075,11 +1085,12 @@ class DraftToolBar:
|
||||
if self.taskmode:
|
||||
self.baseWidget.setWindowTitle(title)
|
||||
self.baseWidget.setWindowIcon(QtGui.QIcon(":/icons/"+icon+".svg"))
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.cmdlabel.setText(title)
|
||||
|
||||
def selectUi(self,extra=None,callback=None):
|
||||
if not self.taskmode:
|
||||
# self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.labelx.setText(translate("draft", "Pick Object"))
|
||||
self.labelx.show()
|
||||
self.makeDumbTask(extra,callback)
|
||||
@@ -1437,6 +1448,7 @@ class DraftToolBar:
|
||||
"""escapes the current command"""
|
||||
self.continueMode = False
|
||||
if not self.taskmode:
|
||||
# self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.continueCmd.setChecked(False)
|
||||
self.finish()
|
||||
|
||||
@@ -1850,10 +1862,12 @@ class DraftToolBar:
|
||||
|
||||
def show(self):
|
||||
if not self.taskmode:
|
||||
# self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.draftWidget.setVisible(True)
|
||||
|
||||
def hide(self):
|
||||
if not self.taskmode:
|
||||
# self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.draftWidget.setVisible(False)
|
||||
|
||||
def getXPM(self,iconname,size=16):
|
||||
@@ -2008,7 +2022,7 @@ class DraftToolBar:
|
||||
self.setWatchers()
|
||||
if hasattr(self,"tray"):
|
||||
self.tray.show()
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.draftWidget.setVisible(True)
|
||||
self.draftWidget.toggleViewAction().setVisible(True)
|
||||
|
||||
@@ -2021,7 +2035,7 @@ class DraftToolBar:
|
||||
#self.tray = None
|
||||
if hasattr(self,"tray"):
|
||||
self.tray.hide()
|
||||
else:
|
||||
else: # self.taskmode == 0 Draft toolbar is obsolete and has been disabled (February 2020)
|
||||
self.draftWidget.setVisible(False)
|
||||
self.draftWidget.toggleViewAction().setVisible(False)
|
||||
|
||||
@@ -2389,12 +2403,12 @@ class ShapeStringTaskPanel:
|
||||
ParamGroup = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Dialog")
|
||||
if Flag == "Overwrite":
|
||||
GroupContent = ParamGroup.GetContents()
|
||||
|
||||
Found = False
|
||||
for ParamSet in GroupContent:
|
||||
if ParamSet[1] == "DontUseNativeFontDialog":
|
||||
Found = True
|
||||
break
|
||||
if GroupContent:
|
||||
for ParamSet in GroupContent:
|
||||
if ParamSet[1] == "DontUseNativeFontDialog":
|
||||
Found = True
|
||||
break
|
||||
|
||||
if Found == False:
|
||||
ParamGroup.SetBool("DontUseNativeFontDialog", True) #initialize nonexisting one
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>486</width>
|
||||
<height>808</height>
|
||||
<width>584</width>
|
||||
<height>881</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -17,7 +17,16 @@
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
@@ -32,59 +41,6 @@
|
||||
<string>General Draft Settings</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="text">
|
||||
<string>Draft interface mode</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefComboBox" name="gui::prefcombobox_4">
|
||||
<property name="toolTip">
|
||||
<string>This is the UI mode in which the Draft module will work: Toolbar mode will place all Draft settings in a separate toolbar, while taskbar mode will use the FreeCAD Taskview system for all its user interaction</string>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>UiMode</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Toolbar</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Taskview</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_5">
|
||||
<property name="toolTip">
|
||||
@@ -515,15 +471,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutRelative</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -565,15 +521,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutContinue</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -615,15 +571,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutClose</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -667,15 +623,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutCopy</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -715,15 +671,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutSubelementMode</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -763,15 +719,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutFill</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -815,15 +771,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutExit</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -863,15 +819,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutSelectEdge</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -911,15 +867,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutAddHold</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -963,15 +919,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutLength</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1011,15 +967,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutWipe</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1059,15 +1015,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutSetWP</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1111,15 +1067,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutCycleSnap</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1169,15 +1125,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutSnap</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1217,15 +1173,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutIncreaseRadius</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1265,15 +1221,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutDecreaseRadius</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1317,15 +1273,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutRestrictX</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1365,15 +1321,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>inCommandShortcutRestrictY</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1413,15 +1369,15 @@ Values with differences below this value will be treated as same. This value wil
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>RestrictZ</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Draft</cstring>
|
||||
</property>
|
||||
<property name="clearButtonEnabled" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
2020 February
|
||||
|
||||
These files define the GuiCommands, that is, actions called in a graphical
|
||||
way, either buttons, menu entries, or context commands.
|
||||
|
||||
These tools should be split from the big `DraftTools.py` module.
|
||||
|
||||
These tools are initialized by `InitGui.py`, and require the graphical
|
||||
interface to exist.
|
||||
|
||||
Those commands that require a "task panel" call the respective module
|
||||
and class in `drafttaskpanels/`.
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
2020 February
|
||||
|
||||
At the moment these object functions aren't used.
|
||||
|
||||
When the Draft tools are eventually split into individual modules,
|
||||
the code of the object creation functions should be placed here.
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
2020 February
|
||||
|
||||
These files provide the logic behind the task panel of the GuiCommands
|
||||
defined in `draftguitools/`.
|
||||
|
||||
The task panel graphical interface is properly defined in
|
||||
the `Resources/ui/` files, which are made with QtCreator.
|
||||
|
||||
There are many commands which aren't defined in `draftguitools/`.
|
||||
These are defined in the big `DraftGui.py` module, which needs to be split
|
||||
into individual GuiCommands, and each should have its own dedicated
|
||||
`.ui` file.
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
2020 February
|
||||
|
||||
At the moment these view providers aren't used at all.
|
||||
|
||||
When the Draft tools are eventually split into individual modules,
|
||||
the code of the view providers should be placed here.
|
||||
|
||||
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 71 KiB |
@@ -43,6 +43,7 @@ SET(FemExamples_SRCS
|
||||
femexamples/material_multiple_twoboxes.py
|
||||
femexamples/material_nl_platewithhole.py
|
||||
femexamples/rc_wall_2d.py
|
||||
femexamples/thermomech_bimetall.py
|
||||
femexamples/thermomech_flow1d.py
|
||||
femexamples/thermomech_spine.py
|
||||
)
|
||||
@@ -56,6 +57,7 @@ SET(FemExampleMeshes_SRCS
|
||||
femexamples/meshes/mesh_contact_tube_tube_tria3.py
|
||||
femexamples/meshes/mesh_rc_wall_2d_tria6.py
|
||||
femexamples/meshes/mesh_platewithhole_tetra10.py
|
||||
femexamples/meshes/mesh_thermomech_bimetall_tetra10.py
|
||||
femexamples/meshes/mesh_thermomech_flow1d_seg3.py
|
||||
femexamples/meshes/mesh_thermomech_spine_tetra10.py
|
||||
)
|
||||
@@ -193,6 +195,7 @@ SET(FemTestsCcx_SRCS
|
||||
femtest/data/ccx/Flow1D_thermomech_expected_values
|
||||
femtest/data/ccx/Flow1D_thermomech_inout_nodes.txt
|
||||
femtest/data/ccx/Flow1D_thermomech.FCStd
|
||||
femtest/data/ccx/thermomech_bimetall.inp
|
||||
)
|
||||
|
||||
SET(FemTestsElmer_SRCS
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
<file>icons/fem-solver-analysis-frequency.svg</file>
|
||||
<file>icons/fem-solver-analysis-static.svg</file>
|
||||
<file>icons/fem-solver-analysis-thermomechanical.svg</file>
|
||||
<file>icons/fem-solver-cfd.svg</file>
|
||||
<file>icons/fem-solver-control.svg</file>
|
||||
<file>icons/fem-solver-elmer.svg</file>
|
||||
<file>icons/fem-solver-inp-editor.svg</file>
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns: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="svg2860" sodipodi:version="0.32" inkscape:version="0.48.5 r10040" sodipodi:docname="fem-cfd-analysis.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1">
|
||||
<defs id="defs2862">
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3768">
|
||||
<stop style="stop-color:#edd400;stop-opacity:1;" offset="0" id="stop3770"/>
|
||||
<stop style="stop-color:#edd400;stop-opacity:0;" offset="1" id="stop3772"/>
|
||||
</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"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3377" id="radialGradient3703" gradientUnits="userSpaceOnUse" cx="135.38333" cy="97.369568" fx="135.38333" fy="97.369568" r="19.467436" gradientTransform="matrix(0.97435,0.2250379,-0.4623105,2.0016728,48.487554,-127.99883)"/>
|
||||
<linearGradient id="linearGradient3377">
|
||||
<stop id="stop3379" offset="0" style="stop-color:#faff2b;stop-opacity:1;"/>
|
||||
<stop id="stop3381" offset="1" style="stop-color:#ffaa00;stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3377" id="radialGradient3705" gradientUnits="userSpaceOnUse" cx="148.88333" cy="81.869568" fx="148.88333" fy="81.869568" r="19.467436" gradientTransform="matrix(1.3852588,-5.1367833e-2,3.7056289e-2,0.9993132,-60.392403,7.7040438)"/>
|
||||
<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="perspective2868"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3768" id="linearGradient3774" x1="43" y1="37" x2="31" y2="7" gradientUnits="userSpaceOnUse"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3768" id="linearGradient3788" gradientUnits="userSpaceOnUse" x1="43" y1="37" x2="31" y2="7"/>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="7.7781746" inkscape:cx="36.77016" inkscape:cy="28.804499" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="1600" inkscape:window-height="837" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" inkscape:snap-nodes="false" inkscape:snap-bbox="true">
|
||||
<inkscape:grid type="xygrid" id="grid2993" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata2865">
|
||||
<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:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[qingfengxia]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:title>fem-cfd-analysis</dc:title>
|
||||
<dc:date>2016-08-10</dc:date>
|
||||
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/Mod/</dc:identifier>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
|
||||
<g transform="matrix(1.3636193,0,0,1.6799586,-14.455353,-39.135338)" style="font-size:22.03626633000000012px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1.32139944999999992;stroke-linejoin:round;font-family:Bitstream Vera Sans" id="text2991">
|
||||
<path d="m 25.755667,44.466664 0,2.291858 c -0.731686,-0.681447 -1.513571,-1.190748 -2.345657,-1.527905 -0.824936,-0.337129 -1.70366,-0.505701 -2.636174,-0.505715 -1.836363,1.4e-5 -3.242322,0.563115 -4.217879,1.689303 -0.975568,1.119041 -1.46335,2.740197 -1.463346,4.863473 -4e-6,2.116119 0.487778,3.737275 1.463346,4.863473 0.975557,1.119031 2.381516,1.678545 4.217879,1.678544 0.932514,10e-7 1.811238,-0.16857 2.636174,-0.505715 0.832086,-0.337142 1.613971,-0.846443 2.345657,-1.527906 l 0,2.270338 c -0.760379,0.516476 -1.56737,0.903832 -2.420976,1.162069 -0.846456,0.258237 -1.743113,0.387356 -2.689974,0.387356 -2.431743,0 -4.347003,-0.742432 -5.745784,-2.227298 -1.398789,-1.492036 -2.098181,-3.525654 -2.09818,-6.100861 -1e-6,-2.582364 0.699391,-4.615983 2.09818,-6.100861 1.398781,-1.492023 3.314041,-2.238042 5.745784,-2.238058 0.961207,1.6e-5 1.865038,0.129135 2.711494,0.387356 0.853605,0.25108 1.653423,0.631263 2.399456,1.140549" id="path3777" inkscape:connector-curvature="0" style="fill:#ef2929;stroke:#a40000;stroke-width:1.32139944999999992;stroke-linejoin:round"/>
|
||||
<path d="m 29.134275,43.229276 9.23199,0 0,1.829182 -7.058491,0 0,4.734354 6.369858,0 0,1.829183 -6.369858,0 0,7.671805 -2.173499,0 0,-16.064524" id="path3779" inkscape:connector-curvature="0" style="fill:#ef2929;stroke:#a40000;stroke-width:1.32139944999999992;stroke-linejoin:round"/>
|
||||
<path d="m 44.00445,45.015419 0,12.492239 2.625414,0 c 2.21653,10e-7 3.837686,-0.502127 4.863473,-1.506386 1.032937,-1.004252 1.549412,-2.589542 1.549425,-4.755874 -1.3e-5,-2.151969 -0.516488,-3.726498 -1.549425,-4.723594 -1.025787,-1.004243 -2.646943,-1.506371 -4.863473,-1.506385 l -2.625414,0 m -2.173499,-1.786143 4.465357,0 c 3.113186,1.6e-5 5.397869,0.649196 6.854053,1.947541 1.456158,1.291201 2.184243,3.314059 2.184259,6.068581 -1.6e-5,2.768885 -0.731688,4.802504 -2.195019,6.100861 -1.463358,1.298362 -3.744453,1.947541 -6.843293,1.947541 l -4.465357,0 0,-16.064524" id="path3781" inkscape:connector-curvature="0" style="fill:#ef2929;stroke:#a40000;stroke-width:1.32139944999999992;stroke-linejoin:round"/>
|
||||
</g>
|
||||
<g id="g3783" transform="matrix(0.81056367,0,0,0.83951051,6.0401219,0.58006947)">
|
||||
<g id="text3014" style="font-size:54.47337341px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffff00;fill-opacity:1;stroke:#302b00;stroke-width:2.42450643;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:4.1;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" transform="scale(1.0450343,0.95690641)">
|
||||
<path id="path3764" style="stroke:#302b00;stroke-width:2.42450643" d="m 21.750465,28.45671 14.575883,0 L 29.038407,9.5718981 21.750465,28.45671 m -11.224494,14.389695 0,-2.819423 3.484381,0 14.15031,-36.891879 4.468519,0 14.176908,36.891879 3.909954,0 0,2.819423 -14.442892,0 0,-2.819423 4.415323,0 -3.324791,-8.724251 -16.703749,0 -3.324791,8.724251 4.362125,0 0,2.819423 -11.171297,0" inkscape:connector-curvature="0"/>
|
||||
</g>
|
||||
<path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3766" d="M 45,37 32,6" style="fill:#edd400;stroke:url(#linearGradient3788);stroke-width:1.21225321px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.9 KiB |
@@ -207,6 +207,9 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -227,22 +230,22 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="sb_displacement_factor">
|
||||
<widget class="QDoubleSpinBox" name="sb_displacement_factor">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="inputMethodHints">
|
||||
<set>Qt::ImhFormattedNumbersOnly</set>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1000000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -260,21 +263,21 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="sb_displacement_factor_max">
|
||||
<widget class="QDoubleSpinBox" name="sb_displacement_factor_max">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="inputMethodHints">
|
||||
<set>Qt::ImhFormattedNumbersOnly</set>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1000000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
<double>1000000.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -304,7 +307,7 @@
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.function can be used on available values. </span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -437,22 +440,6 @@ p, li { white-space: pre-wrap; }
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cb_show_displacement</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>sb_displacement_factor</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>112</x>
|
||||
<y>240</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>124</x>
|
||||
<y>269</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cb_show_displacement</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
@@ -469,22 +456,6 @@ p, li { white-space: pre-wrap; }
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cb_show_displacement</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>sb_displacement_factor_max</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>161</x>
|
||||
<y>237</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>159</x>
|
||||
<y>302</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cb_show_displacement</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
|
||||
@@ -129,6 +129,7 @@ gf()
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_contact_solid_solid"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_material_multiple"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_material_nonlinar"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_thermomech_bimetall"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_thermomech_flow1D_analysis"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_thermomech_spine_analysis"
|
||||
./bin/FreeCADCmd --run-test "femtest.app.test_common.TestFemCommon.test_adding_refshaps"
|
||||
@@ -183,6 +184,9 @@ unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.a
|
||||
import unittest
|
||||
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_static_material_nonlinar"))
|
||||
|
||||
import unittest
|
||||
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_thermomech_bimetall"))
|
||||
|
||||
import unittest
|
||||
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_thermomech_flow1D_analysis"))
|
||||
|
||||
|
||||
@@ -89,6 +89,8 @@ def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
BooleanFrag = BOPTools.SplitFeatures.makeBooleanFragments(name='BooleanFragments')
|
||||
BooleanFrag.Objects = [upper_tube, force_point]
|
||||
if FreeCAD.GuiUp:
|
||||
upper_tube.ViewObject.hide()
|
||||
|
||||
compound = doc.addObject("Part::Compound", "Compound")
|
||||
compound.Links = [BooleanFrag, lower_tube]
|
||||
|
||||
@@ -33,6 +33,7 @@ setup()
|
||||
|
||||
|
||||
import FreeCAD
|
||||
import Part
|
||||
import ObjectsFem
|
||||
import Fem
|
||||
from FreeCAD import Vector, Rotation
|
||||
@@ -55,7 +56,7 @@ def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# parts
|
||||
# bottom box
|
||||
bottom_box_obj = doc.addObject("Part::Box", "TopBox")
|
||||
bottom_box_obj = doc.addObject("Part::Box", "BottomBox")
|
||||
bottom_box_obj.Length = 100
|
||||
bottom_box_obj.Width = 25
|
||||
bottom_box_obj.Height = 500
|
||||
@@ -64,31 +65,20 @@ def setup(doc=None, solvertype="ccxtools"):
|
||||
Rotation(0, 0, 0),
|
||||
Vector(0, 0, 0),
|
||||
)
|
||||
doc.recompute()
|
||||
|
||||
# top half cylinder
|
||||
top_cylinder_obj = doc.addObject("Part::Cylinder", "BottomCylinder")
|
||||
top_cylinder_obj.Radius = 30
|
||||
top_cylinder_obj.Height = 500
|
||||
top_cylinder_obj.Placement = FreeCAD.Placement(
|
||||
# top half cylinder, https://forum.freecadweb.org/viewtopic.php?f=18&t=43001#p366111
|
||||
top_halfcyl_obj = doc.addObject("Part::Cylinder", "TopHalfCylinder")
|
||||
top_halfcyl_obj.Radius = 30
|
||||
top_halfcyl_obj.Height = 500
|
||||
top_halfcyl_obj.Angle = 180
|
||||
top_halfcyl_sh = Part.getShape(top_halfcyl_obj, '', needSubElement=False, refine=True)
|
||||
top_halfcyl_obj.Shape = top_halfcyl_sh
|
||||
top_halfcyl_obj.Placement = FreeCAD.Placement(
|
||||
Vector(0, -42, 0),
|
||||
Rotation(0, 90, 0),
|
||||
Vector(0, 0, 0),
|
||||
)
|
||||
top_box_obj = doc.addObject("Part::Box", "BottomBox")
|
||||
top_box_obj.Length = 600
|
||||
top_box_obj.Width = 100
|
||||
top_box_obj.Height = 100
|
||||
top_box_obj.Placement = FreeCAD.Placement(
|
||||
Vector(-10, -142, -52),
|
||||
Rotation(0, 0, 0),
|
||||
Vector(0, 0, 0),
|
||||
)
|
||||
top_halfcyl_obj = doc.addObject("Part::Cut", "BottomHalfCylinder")
|
||||
top_halfcyl_obj.Base = top_cylinder_obj
|
||||
top_halfcyl_obj.Tool = top_box_obj
|
||||
if FreeCAD.GuiUp:
|
||||
top_cylinder_obj.ViewObject.hide()
|
||||
top_box_obj.ViewObject.hide()
|
||||
doc.recompute()
|
||||
|
||||
# all geom fusion
|
||||
@@ -97,7 +87,6 @@ def setup(doc=None, solvertype="ccxtools"):
|
||||
if FreeCAD.GuiUp:
|
||||
bottom_box_obj.ViewObject.hide()
|
||||
top_halfcyl_obj.ViewObject.hide()
|
||||
|
||||
doc.recompute()
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
@@ -156,14 +145,14 @@ def setup(doc=None, solvertype="ccxtools"):
|
||||
(all_geom_fusion_obj, "Face5"),
|
||||
(all_geom_fusion_obj, "Face6"),
|
||||
(all_geom_fusion_obj, "Face8"),
|
||||
(all_geom_fusion_obj, "Face10"),
|
||||
(all_geom_fusion_obj, "Face9"),
|
||||
]
|
||||
|
||||
# constraint pressure
|
||||
con_pressure = analysis.addObject(
|
||||
ObjectsFem.makeConstraintPressure(doc, name="ConstraintPressure")
|
||||
)[0]
|
||||
con_pressure.References = [(all_geom_fusion_obj, "Face9")]
|
||||
con_pressure.References = [(all_geom_fusion_obj, "Face10")]
|
||||
con_pressure.Pressure = 100.0 # Pa ? = 100 Mpa ?
|
||||
con_pressure.Reversed = False
|
||||
|
||||
|
||||
@@ -38,10 +38,10 @@ doc = run_constraint_contact_solid_solid()
|
||||
doc = run_material_nl_platewithhole()
|
||||
doc = run_material_multiple_twoboxes()
|
||||
doc = run_rcwall2d()
|
||||
doc = run_thermomech_bimetall()
|
||||
doc = run_thermomech_flow1d()
|
||||
doc = run_thermomech_spine()
|
||||
|
||||
|
||||
doc = run_ccx_cantilevernodeload("calculix")
|
||||
doc = run_ccx_cantilevernodeload("ccxtools")
|
||||
doc = run_ccx_cantilevernodeload("z88")
|
||||
@@ -250,6 +250,21 @@ def run_rcwall2d(solver=None, base_name=None):
|
||||
return doc
|
||||
|
||||
|
||||
def run_thermomech_bimetall(solver=None, base_name=None):
|
||||
|
||||
from .thermomech_bimetall import setup
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = "Thermomech_Bimetall"
|
||||
if solver is not None:
|
||||
base_name += "_" + solver
|
||||
run_analysis(doc, base_name)
|
||||
doc.recompute()
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
def run_thermomech_flow1d(solver=None, base_name=None):
|
||||
|
||||
from .thermomech_flow1d import setup
|
||||
@@ -286,8 +301,11 @@ def run_all():
|
||||
run_ccx_cantileverfaceload()
|
||||
run_ccx_cantilevernodeload()
|
||||
run_ccx_cantileverprescribeddisplacement()
|
||||
run_constraint_contact_shell_shell()
|
||||
run_constraint_contact_solid_solid()
|
||||
run_material_nl_platewithhole()
|
||||
run_material_multiple_twoboxes()
|
||||
run_rcwall2d()
|
||||
run_thermomech_bimetall()
|
||||
run_thermomech_flow1d()
|
||||
run_thermomech_spine()
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2020 Bernd Hahnebach <[email protected]> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * 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. *
|
||||
# * *
|
||||
# * FreeCAD is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with FreeCAD; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
|
||||
# thermomechanical bimetall
|
||||
# https://forum.freecadweb.org/viewtopic.php?f=18&t=43040&start=10#p366664
|
||||
# analytical solution 7.05 mm deflection in the invar material direction
|
||||
# see post in the forum link
|
||||
# this file has 7.15 mm max deflection
|
||||
# to run the example use:
|
||||
"""
|
||||
from femexamples.thermomech_bimetall import setup
|
||||
setup()
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import FreeCAD
|
||||
import ObjectsFem
|
||||
import Fem
|
||||
from FreeCAD import Vector, Rotation
|
||||
import BOPTools.SplitFeatures
|
||||
|
||||
|
||||
mesh_name = "Mesh" # needs to be Mesh to work with unit tests
|
||||
|
||||
|
||||
def init_doc(doc=None):
|
||||
if doc is None:
|
||||
doc = FreeCAD.newDocument()
|
||||
return doc
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
# setup model
|
||||
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# parts
|
||||
# bottom box
|
||||
bottom_box_obj = doc.addObject("Part::Box", "BottomBox")
|
||||
bottom_box_obj.Length = 100
|
||||
bottom_box_obj.Width = 5
|
||||
bottom_box_obj.Height = 1
|
||||
|
||||
# top box
|
||||
top_box_obj = doc.addObject("Part::Box", "TopBox")
|
||||
top_box_obj.Length = 100
|
||||
top_box_obj.Width = 5
|
||||
top_box_obj.Height = 1
|
||||
top_box_obj.Placement = FreeCAD.Placement(
|
||||
Vector(0, 0, 1),
|
||||
Rotation(0, 0, 0),
|
||||
Vector(0, 0, 0),
|
||||
)
|
||||
doc.recompute()
|
||||
|
||||
# all geom boolean fragment
|
||||
all_geom_boolfrag_obj = BOPTools.SplitFeatures.makeBooleanFragments(name='BooleanFragments')
|
||||
all_geom_boolfrag_obj.Objects = [bottom_box_obj, top_box_obj]
|
||||
if FreeCAD.GuiUp:
|
||||
bottom_box_obj.ViewObject.hide()
|
||||
top_box_obj.ViewObject.hide()
|
||||
doc.recompute()
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
FreeCADGui.ActiveDocument.activeView().viewAxonometric()
|
||||
FreeCADGui.SendMsgToActiveView("ViewFit")
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
|
||||
|
||||
# solver
|
||||
if solvertype == "calculix":
|
||||
solver_object = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
|
||||
)[0]
|
||||
elif solvertype == "ccxtools":
|
||||
solver_object = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
|
||||
)[0]
|
||||
solver_object.WorkingDir = u""
|
||||
if solvertype == "calculix" or solvertype == "ccxtools":
|
||||
solver_object.AnalysisType = "thermomech"
|
||||
solver_object.GeometricalNonlinearity = "linear"
|
||||
solver_object.ThermoMechSteadyState = True
|
||||
# solver_object.MatrixSolverType = "default"
|
||||
solver_object.MatrixSolverType = "spooles" # thomas
|
||||
solver_object.SplitInputWriter = False
|
||||
solver_object.IterationsThermoMechMaximum = 2000
|
||||
# solver_object.IterationsControlParameterTimeUse = True # thermomech spine
|
||||
|
||||
# material
|
||||
material_obj_bottom = analysis.addObject(
|
||||
ObjectsFem.makeMaterialSolid(doc, "MaterialCopper")
|
||||
)[0]
|
||||
mat = material_obj_bottom.Material
|
||||
mat["Name"] = "Copper"
|
||||
mat["YoungsModulus"] = "130000 MPa"
|
||||
mat["PoissonRatio"] = "0.354"
|
||||
mat["SpecificHeat"] = "385 J/kg/K"
|
||||
mat["ThermalConductivity"] = "200 W/m/K"
|
||||
mat["ThermalExpansionCoefficient"] = "0.00002 m/m/K"
|
||||
material_obj_bottom.Material = mat
|
||||
material_obj_bottom.References = [(all_geom_boolfrag_obj, "Solid1")]
|
||||
analysis.addObject(material_obj_bottom)
|
||||
|
||||
material_obj_top = analysis.addObject(
|
||||
ObjectsFem.makeMaterialSolid(doc, "MaterialInvar")
|
||||
)[0]
|
||||
mat = material_obj_top.Material
|
||||
mat["Name"] = "Invar"
|
||||
mat["YoungsModulus"] = "137000 MPa"
|
||||
mat["PoissonRatio"] = "0.28"
|
||||
mat["SpecificHeat"] = "510 J/kg/K"
|
||||
mat["ThermalConductivity"] = "13 W/m/K"
|
||||
mat["ThermalExpansionCoefficient"] = "0.0000012 m/m/K"
|
||||
material_obj_top.Material = mat
|
||||
material_obj_top.References = [(all_geom_boolfrag_obj, "Solid2")]
|
||||
analysis.addObject(material_obj_top)
|
||||
|
||||
# constraint fixed
|
||||
con_fixed = analysis.addObject(
|
||||
ObjectsFem.makeConstraintFixed(doc, "ConstraintFixed")
|
||||
)[0]
|
||||
con_fixed.References = [
|
||||
(all_geom_boolfrag_obj, "Face1"),
|
||||
(all_geom_boolfrag_obj, "Face7"),
|
||||
]
|
||||
|
||||
# constraint initial temperature
|
||||
constraint_initialtemp = analysis.addObject(
|
||||
ObjectsFem.makeConstraintInitialTemperature(doc, "ConstraintInitialTemperature")
|
||||
)[0]
|
||||
constraint_initialtemp.initialTemperature = 273.0
|
||||
|
||||
# constraint temperature
|
||||
constraint_temperature = analysis.addObject(
|
||||
ObjectsFem.makeConstraintTemperature(doc, "ConstraintTemperature")
|
||||
)[0]
|
||||
constraint_temperature.References = [
|
||||
(all_geom_boolfrag_obj, "Face1"),
|
||||
(all_geom_boolfrag_obj, "Face2"),
|
||||
(all_geom_boolfrag_obj, "Face3"),
|
||||
(all_geom_boolfrag_obj, "Face4"),
|
||||
(all_geom_boolfrag_obj, "Face5"),
|
||||
(all_geom_boolfrag_obj, "Face7"),
|
||||
(all_geom_boolfrag_obj, "Face8"),
|
||||
(all_geom_boolfrag_obj, "Face9"),
|
||||
(all_geom_boolfrag_obj, "Face10"),
|
||||
(all_geom_boolfrag_obj, "Face11"),
|
||||
]
|
||||
constraint_temperature.Temperature = 373.0
|
||||
constraint_temperature.CFlux = 0.0
|
||||
|
||||
# mesh
|
||||
from .meshes.mesh_thermomech_bimetall_tetra10 import create_nodes, create_elements
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating nodes.\n")
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating elements.\n")
|
||||
femmesh_obj = analysis.addObject(
|
||||
doc.addObject("Fem::FemMeshObject", mesh_name)
|
||||
)[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
@@ -203,7 +203,9 @@ class _TaskPanelFemMaterial:
|
||||
|
||||
# get all available materials (fill self.materials, self.cards and self.icons)
|
||||
from materialtools.cardutils import import_materials as getmats
|
||||
self.materials, self.cards, self.icons = getmats()
|
||||
# Note: import_materials(category="Solid", ...),
|
||||
# category default to Solid, but must be given for FluidMaterial to be imported
|
||||
self.materials, self.cards, self.icons = getmats(self.obj.Category)
|
||||
# fill the material comboboxes with material cards
|
||||
self.add_cards_to_combo_box()
|
||||
|
||||
|
||||
@@ -217,16 +217,9 @@ class _TaskPanelFemResultShow:
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.hsb_disp_factor_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.sb_displacement_factor,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.sb_disp_factor_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.sb_displacement_factor_max,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.sb_disp_factor_max_changed
|
||||
)
|
||||
|
||||
self.form.sb_displacement_factor.valueChanged.connect(self.sb_disp_factor_changed)
|
||||
self.form.sb_displacement_factor_max.valueChanged.connect(self.sb_disp_factor_max_changed)
|
||||
|
||||
# user defined equation
|
||||
QtCore.QObject.connect(
|
||||
@@ -247,11 +240,8 @@ class _TaskPanelFemResultShow:
|
||||
self.restore_initial_result_dialog()
|
||||
# initialize scale factor for show displacement
|
||||
scale_factor = get_displacement_scale_factor(self.result_obj)
|
||||
self.form.sb_displacement_factor_max.setValue(10. * scale_factor)
|
||||
self.form.sb_displacement_factor.setValue(scale_factor)
|
||||
self.form.hsb_displacement_factor.setValue(scale_factor)
|
||||
diggits_scale_factor = len(str(abs(int(scale_factor))))
|
||||
new_max_factor = 10 ** diggits_scale_factor
|
||||
self.form.sb_displacement_factor_max.setValue(new_max_factor)
|
||||
|
||||
def restore_result_dialog(self):
|
||||
try:
|
||||
@@ -302,8 +292,8 @@ class _TaskPanelFemResultShow:
|
||||
|
||||
df = FreeCAD.FEM_dialog["disp_factor"]
|
||||
dfm = FreeCAD.FEM_dialog["disp_factor_max"]
|
||||
self.form.hsb_displacement_factor.setMaximum(dfm)
|
||||
self.form.hsb_displacement_factor.setValue(df)
|
||||
# self.form.hsb_displacement_factor.setMaximum(dfm)
|
||||
# self.form.hsb_displacement_factor.setValue(df)
|
||||
self.form.sb_displacement_factor_max.setValue(dfm)
|
||||
self.form.sb_displacement_factor.setValue(df)
|
||||
except:
|
||||
@@ -322,9 +312,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog = {
|
||||
"results_type": "None",
|
||||
"show_disp": False,
|
||||
"disp_factor": 0,
|
||||
"disp_factor_max": 100
|
||||
"disp_factor": 0.,
|
||||
"disp_factor_max": 100.
|
||||
}
|
||||
self.form.sb_displacement_factor_max.setValue(100.) # init non standard values
|
||||
|
||||
def getStandardButtons(self):
|
||||
return int(QtGui.QDialogButtonBox.Close)
|
||||
@@ -545,7 +536,7 @@ class _TaskPanelFemResultShow:
|
||||
def update_displacement(self, factor=None):
|
||||
if factor is None:
|
||||
if FreeCAD.FEM_dialog["show_disp"]:
|
||||
factor = self.form.hsb_displacement_factor.value()
|
||||
factor = self.form.sb_displacement_factor.value()
|
||||
else:
|
||||
factor = 0.0
|
||||
self.mesh_obj.ViewObject.applyDisplacement(factor)
|
||||
@@ -566,16 +557,32 @@ class _TaskPanelFemResultShow:
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
|
||||
def hsb_disp_factor_changed(self, value):
|
||||
self.form.sb_displacement_factor.setValue(value)
|
||||
self.form.sb_displacement_factor.setValue(
|
||||
value / 100. * self.form.sb_displacement_factor_max.value()
|
||||
)
|
||||
self.update_displacement()
|
||||
|
||||
def sb_disp_factor_max_changed(self, value):
|
||||
FreeCAD.FEM_dialog["disp_factor_max"] = value
|
||||
self.form.hsb_displacement_factor.setMaximum(value)
|
||||
if value < self.form.sb_displacement_factor.value():
|
||||
self.form.sb_displacement_factor.setValue(value)
|
||||
if value == 0.:
|
||||
self.form.hsb_displacement_factor.setValue(0)
|
||||
else:
|
||||
self.form.hsb_displacement_factor.setValue(
|
||||
round(self.form.sb_displacement_factor.value() / value * 100.)
|
||||
)
|
||||
|
||||
def sb_disp_factor_changed(self, value):
|
||||
FreeCAD.FEM_dialog["disp_factor"] = value
|
||||
self.form.hsb_displacement_factor.setValue(value)
|
||||
if value > self.form.sb_displacement_factor_max.value():
|
||||
self.form.sb_displacement_factor.setValue(self.form.sb_displacement_factor_max.value())
|
||||
if self.form.sb_displacement_factor_max.value() == 0.:
|
||||
self.form.hsb_displacement_factor.setValue(0.)
|
||||
else:
|
||||
self.form.hsb_displacement_factor.setValue(
|
||||
round(value / self.form.sb_displacement_factor_max.value() * 100.)
|
||||
)
|
||||
|
||||
def disable_empty_result_buttons(self):
|
||||
""" disable radio buttons if result does not exists in result object"""
|
||||
|
||||
@@ -52,7 +52,10 @@ def get_femnodes_by_femobj_with_references(
|
||||
node_set = get_femnodes_by_references(femmesh, femobj["Object"].References)
|
||||
# FreeCAD.Console.PrintMessage("node_set_nogroup: {}\n".format(node_set))
|
||||
|
||||
return node_set
|
||||
# use set for node sets to be sure all nodes are unique
|
||||
# use sorted to be sure the order is the same on different runs
|
||||
# be aware a sorted set returns a list, because set are not sorted by default
|
||||
return sorted(set(node_set))
|
||||
|
||||
|
||||
# ************************************************************************************************
|
||||
|
||||
@@ -123,6 +123,12 @@ class FemInputWriter():
|
||||
self.femelement_edges_table = {}
|
||||
self.femelement_count_test = True
|
||||
|
||||
# use set for node sets to be sure all nodes are unique
|
||||
# use sorted to be sure the order is the same on different runs
|
||||
# be aware a sorted set returns a list, because set are not sorted by default
|
||||
# - done in return value of meshtools.get_femnodes_by_femobj_with_references
|
||||
# might be appropriate for element sets too
|
||||
|
||||
def get_constraints_fixed_nodes(self):
|
||||
# get nodes
|
||||
for femobj in self.fixed_objects:
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
# ***************************************************************************/
|
||||
|
||||
import unittest
|
||||
import sys
|
||||
from os.path import join
|
||||
|
||||
|
||||
@@ -168,12 +167,14 @@ class TestCcxTools(unittest.TestCase):
|
||||
"FEM_ccx_constraint_contact_solid_solid",
|
||||
)
|
||||
|
||||
"""
|
||||
# test input file writing
|
||||
self.input_file_writing_test(
|
||||
test_name=test_name,
|
||||
base_name=base_name,
|
||||
analysis_dir=analysis_dir,
|
||||
)
|
||||
"""
|
||||
|
||||
# ********************************************************************************************
|
||||
def test_static_material_multiple(
|
||||
@@ -211,13 +212,32 @@ class TestCcxTools(unittest.TestCase):
|
||||
)
|
||||
|
||||
# test input file writing
|
||||
if sys.version_info.major >= 3:
|
||||
# https://forum.freecadweb.org/viewtopic.php?f=18&t=42821
|
||||
self.input_file_writing_test(
|
||||
test_name=test_name,
|
||||
base_name=base_name,
|
||||
analysis_dir=analysis_dir,
|
||||
)
|
||||
self.input_file_writing_test(
|
||||
test_name=test_name,
|
||||
base_name=base_name,
|
||||
analysis_dir=analysis_dir,
|
||||
)
|
||||
|
||||
# ********************************************************************************************
|
||||
def test_thermomech_bimetall(
|
||||
self
|
||||
):
|
||||
# set up
|
||||
from femexamples.thermomech_bimetall import setup
|
||||
setup(self.active_doc, "ccxtools")
|
||||
test_name = "thermomech bimetall"
|
||||
base_name = "thermomech_bimetall"
|
||||
analysis_dir = testtools.get_unit_test_tmp_dir(
|
||||
self.temp_dir,
|
||||
"FEM_ccx_thermomech_bimetall"
|
||||
)
|
||||
|
||||
# test input file writing
|
||||
self.input_file_writing_test(
|
||||
test_name=test_name,
|
||||
base_name=base_name,
|
||||
analysis_dir=analysis_dir,
|
||||
)
|
||||
|
||||
# ********************************************************************************************
|
||||
def test_thermomech_flow1D_analysis(
|
||||
|
||||
@@ -4346,15 +4346,22 @@ Evolumes
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
1561,
|
||||
1562,
|
||||
1563,
|
||||
1564,
|
||||
1565,
|
||||
1566,
|
||||
1567,
|
||||
1568,
|
||||
1569,
|
||||
91,
|
||||
92,
|
||||
93,
|
||||
94,
|
||||
95,
|
||||
96,
|
||||
97,
|
||||
98,
|
||||
99,
|
||||
164,
|
||||
165,
|
||||
166,
|
||||
167,
|
||||
168,
|
||||
274,
|
||||
366,
|
||||
559,
|
||||
560,
|
||||
561,
|
||||
@@ -4373,15 +4380,6 @@ Evolumes
|
||||
574,
|
||||
575,
|
||||
576,
|
||||
91,
|
||||
92,
|
||||
93,
|
||||
94,
|
||||
95,
|
||||
96,
|
||||
97,
|
||||
98,
|
||||
99,
|
||||
649,
|
||||
650,
|
||||
651,
|
||||
@@ -4394,20 +4392,6 @@ Evolumes
|
||||
658,
|
||||
659,
|
||||
660,
|
||||
164,
|
||||
165,
|
||||
166,
|
||||
167,
|
||||
168,
|
||||
1210,
|
||||
1211,
|
||||
1212,
|
||||
1213,
|
||||
1214,
|
||||
1215,
|
||||
1216,
|
||||
1217,
|
||||
1218,
|
||||
727,
|
||||
728,
|
||||
729,
|
||||
@@ -4426,8 +4410,24 @@ Evolumes
|
||||
742,
|
||||
743,
|
||||
744,
|
||||
274,
|
||||
366,
|
||||
1210,
|
||||
1211,
|
||||
1212,
|
||||
1213,
|
||||
1214,
|
||||
1215,
|
||||
1216,
|
||||
1217,
|
||||
1218,
|
||||
1561,
|
||||
1562,
|
||||
1563,
|
||||
1564,
|
||||
1565,
|
||||
1566,
|
||||
1567,
|
||||
1568,
|
||||
1569,
|
||||
|
||||
***********************************************************
|
||||
** Surfaces for contact constraint
|
||||
@@ -5359,9 +5359,9 @@ RF
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.19.19441 (Git)
|
||||
** written on --> Sat Feb 1 13:08:12 2020
|
||||
** file name --> Constraint_Contact_Solid_Solid.FCStd
|
||||
** written by --> FreeCAD 0.19.19463 (Git)
|
||||
** written on --> Mon Feb 3 23:28:02 2020
|
||||
** file name -->
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
**
|
||||
|
||||
@@ -1174,6 +1174,18 @@ Evolumes
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
52,
|
||||
53,
|
||||
54,
|
||||
58,
|
||||
59,
|
||||
60,
|
||||
64,
|
||||
65,
|
||||
66,
|
||||
67,
|
||||
68,
|
||||
69,
|
||||
273,
|
||||
274,
|
||||
275,
|
||||
@@ -1199,18 +1211,6 @@ Evolumes
|
||||
295,
|
||||
296,
|
||||
297,
|
||||
52,
|
||||
53,
|
||||
54,
|
||||
58,
|
||||
59,
|
||||
60,
|
||||
64,
|
||||
65,
|
||||
66,
|
||||
67,
|
||||
68,
|
||||
69,
|
||||
|
||||
***********************************************************
|
||||
** Materials
|
||||
@@ -1293,9 +1293,9 @@ RF
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.17.13310 (Git)
|
||||
** written on --> Tue Feb 20 07:42:43 2018
|
||||
** file name --> multimat.fcstd
|
||||
** written by --> FreeCAD 0.19.19432 (Git)
|
||||
** written on --> Fri Jan 31 08:06:05 2020
|
||||
** file name -->
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
**
|
||||
|
||||
@@ -19788,126 +19788,7 @@ Evolumes
|
||||
7,
|
||||
8,
|
||||
11,
|
||||
1211,
|
||||
1212,
|
||||
1213,
|
||||
1214,
|
||||
1215,
|
||||
1216,
|
||||
1217,
|
||||
1218,
|
||||
1219,
|
||||
1220,
|
||||
1221,
|
||||
1222,
|
||||
1223,
|
||||
1224,
|
||||
1225,
|
||||
1226,
|
||||
1227,
|
||||
1228,
|
||||
1229,
|
||||
1230,
|
||||
1231,
|
||||
1232,
|
||||
1233,
|
||||
1234,
|
||||
1235,
|
||||
1236,
|
||||
1237,
|
||||
1238,
|
||||
1239,
|
||||
1240,
|
||||
1241,
|
||||
1242,
|
||||
1243,
|
||||
1244,
|
||||
1245,
|
||||
1246,
|
||||
1247,
|
||||
1248,
|
||||
1249,
|
||||
1250,
|
||||
1251,
|
||||
1252,
|
||||
1253,
|
||||
1254,
|
||||
1255,
|
||||
1256,
|
||||
1257,
|
||||
1258,
|
||||
1259,
|
||||
1260,
|
||||
1261,
|
||||
1262,
|
||||
1263,
|
||||
1264,
|
||||
1265,
|
||||
1266,
|
||||
1267,
|
||||
1268,
|
||||
1269,
|
||||
1270,
|
||||
1271,
|
||||
1272,
|
||||
1273,
|
||||
250,
|
||||
1274,
|
||||
1275,
|
||||
1276,
|
||||
1277,
|
||||
1278,
|
||||
1279,
|
||||
1280,
|
||||
1281,
|
||||
1282,
|
||||
1283,
|
||||
1284,
|
||||
1285,
|
||||
1286,
|
||||
1287,
|
||||
1288,
|
||||
1289,
|
||||
1290,
|
||||
1291,
|
||||
1292,
|
||||
1293,
|
||||
1294,
|
||||
1295,
|
||||
1296,
|
||||
1297,
|
||||
1298,
|
||||
1299,
|
||||
1300,
|
||||
1301,
|
||||
1302,
|
||||
1303,
|
||||
1304,
|
||||
1305,
|
||||
1306,
|
||||
1307,
|
||||
1308,
|
||||
1309,
|
||||
1310,
|
||||
1311,
|
||||
1312,
|
||||
1313,
|
||||
1314,
|
||||
1315,
|
||||
1316,
|
||||
1317,
|
||||
1318,
|
||||
1319,
|
||||
1320,
|
||||
1321,
|
||||
1322,
|
||||
1323,
|
||||
1324,
|
||||
1325,
|
||||
1326,
|
||||
1327,
|
||||
1328,
|
||||
1329,
|
||||
409,
|
||||
410,
|
||||
411,
|
||||
@@ -19986,6 +19867,125 @@ Evolumes
|
||||
484,
|
||||
485,
|
||||
486,
|
||||
1211,
|
||||
1212,
|
||||
1213,
|
||||
1214,
|
||||
1215,
|
||||
1216,
|
||||
1217,
|
||||
1218,
|
||||
1219,
|
||||
1220,
|
||||
1221,
|
||||
1222,
|
||||
1223,
|
||||
1224,
|
||||
1225,
|
||||
1226,
|
||||
1227,
|
||||
1228,
|
||||
1229,
|
||||
1230,
|
||||
1231,
|
||||
1232,
|
||||
1233,
|
||||
1234,
|
||||
1235,
|
||||
1236,
|
||||
1237,
|
||||
1238,
|
||||
1239,
|
||||
1240,
|
||||
1241,
|
||||
1242,
|
||||
1243,
|
||||
1244,
|
||||
1245,
|
||||
1246,
|
||||
1247,
|
||||
1248,
|
||||
1249,
|
||||
1250,
|
||||
1251,
|
||||
1252,
|
||||
1253,
|
||||
1254,
|
||||
1255,
|
||||
1256,
|
||||
1257,
|
||||
1258,
|
||||
1259,
|
||||
1260,
|
||||
1261,
|
||||
1262,
|
||||
1263,
|
||||
1264,
|
||||
1265,
|
||||
1266,
|
||||
1267,
|
||||
1268,
|
||||
1269,
|
||||
1270,
|
||||
1271,
|
||||
1272,
|
||||
1273,
|
||||
1274,
|
||||
1275,
|
||||
1276,
|
||||
1277,
|
||||
1278,
|
||||
1279,
|
||||
1280,
|
||||
1281,
|
||||
1282,
|
||||
1283,
|
||||
1284,
|
||||
1285,
|
||||
1286,
|
||||
1287,
|
||||
1288,
|
||||
1289,
|
||||
1290,
|
||||
1291,
|
||||
1292,
|
||||
1293,
|
||||
1294,
|
||||
1295,
|
||||
1296,
|
||||
1297,
|
||||
1298,
|
||||
1299,
|
||||
1300,
|
||||
1301,
|
||||
1302,
|
||||
1303,
|
||||
1304,
|
||||
1305,
|
||||
1306,
|
||||
1307,
|
||||
1308,
|
||||
1309,
|
||||
1310,
|
||||
1311,
|
||||
1312,
|
||||
1313,
|
||||
1314,
|
||||
1315,
|
||||
1316,
|
||||
1317,
|
||||
1318,
|
||||
1319,
|
||||
1320,
|
||||
1321,
|
||||
1322,
|
||||
1323,
|
||||
1324,
|
||||
1325,
|
||||
1326,
|
||||
1327,
|
||||
1328,
|
||||
1329,
|
||||
|
||||
***********************************************************
|
||||
** Materials
|
||||
@@ -20130,9 +20130,9 @@ RF
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.19.19295 (Git)
|
||||
** written on --> Sun Jan 19 12:59:27 2020
|
||||
** file name --> Nonlinear_material_plate_with_hole.FCStd
|
||||
** written by --> FreeCAD 0.19.19432 (Git)
|
||||
** written on --> Fri Jan 31 08:04:49 2020
|
||||
** file name -->
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
**
|
||||
|
||||
@@ -503,47 +503,47 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
if self.fixed_constraints:
|
||||
for c in self.fixed_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint fixed has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# displacement
|
||||
if self.displacement_constraints:
|
||||
for di in self.displacement_constraints:
|
||||
if len(di["Object"].References) == 0:
|
||||
message += "At least one constraint displacement has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# plane rotation
|
||||
if self.planerotation_constraints:
|
||||
for c in self.planerotation_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint plane rotation has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# contact
|
||||
if self.contact_constraints:
|
||||
for c in self.contact_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint contact has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# transform
|
||||
if self.transform_constraints:
|
||||
for c in self.transform_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint transform has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# pressure
|
||||
if self.pressure_constraints:
|
||||
for c in self.pressure_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint pressure has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# force
|
||||
if self.force_constraints:
|
||||
for c in self.force_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint force has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# temperature
|
||||
if self.temperature_constraints:
|
||||
for c in self.temperature_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint temperature has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# heat flux
|
||||
if self.heatflux_constraints:
|
||||
for c in self.heatflux_constraints:
|
||||
if len(c["Object"].References) == 0:
|
||||
message += "At least one constraint heat flux has an empty reference.\n"
|
||||
message += "{} has empty references.".format(c["Object"].Name)
|
||||
# beam section
|
||||
if self.beam_sections:
|
||||
if self.shell_thicknesses:
|
||||
|
||||
@@ -45,7 +45,7 @@ SET (FluidMaterial_Files
|
||||
FluidMaterial/None.FCMat
|
||||
FluidMaterial/Air.FCMat
|
||||
FluidMaterial/Water.FCMat
|
||||
FluidMaterial/Readme.txt
|
||||
FluidMaterial/Readme.md
|
||||
)
|
||||
SOURCE_GROUP("MatLib" FILES ${FluidMaterial_Files})
|
||||
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
[FCMat]
|
||||
[General]
|
||||
Name = Air
|
||||
Description = Standard air properties at 20 Degrees Celsius and 1 atm
|
||||
MolarMass = 28.965
|
||||
Father = Gas
|
||||
|
||||
[Fluidic]
|
||||
Density = 1.20 kg/m^3
|
||||
DynamicViscosity = 1.80e-5 kg/m/s
|
||||
KinematicViscosity = 1.511e-5 m^2/s
|
||||
|
||||
VolumetricThermalExpansionCoefficient = 3.43e-3 m/m/K
|
||||
; PrandtlNumber is a nondimension number for CFD simulation
|
||||
PrandtlNumber = 0.7
|
||||
|
||||
[Thermal]
|
||||
SpecificHeat = 1.005 J/kg/K
|
||||
ThermalConductivity = 0.0257 W/m/K
|
||||
; volumetric expansion coeff of ideal gas depends on temperature and pressure
|
||||
VolumetricThermalExpansionCoefficient = 3.43e-3 m/m/K
|
||||
|
||||
[Electrical]
|
||||
RelativePermittivity = 1.00059
|
||||
; at 18°C and 50Hz
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
[FCdMat]
|
||||
Name = None
|
||||
Description = None
|
||||
; None means nothing, as the starting point of making a new fluid material
|
||||
|
||||
[General]
|
||||
Name = None
|
||||
Description = "None"
|
||||
|
||||
[Fluidic]
|
||||
Density = 0 kg/m^3
|
||||
DynamicViscosity = 0 kg/m/s
|
||||
KinematicViscosity = 0 m^2/s
|
||||
VolumetricThermalExpansionCoefficient = 0 m/m/K
|
||||
|
||||
[Thermal]
|
||||
SpecificHeat = 0 J/kg/K
|
||||
ThermalConductivity = 0 W/m/K
|
||||
ThermalExpansionCoefficient = 0 um/m/K
|
||||
VolumetricThermalExpansionCoefficient = 0 m/m/K
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# FreeCAD fluid material library
|
||||
|
||||
It's intended to gather the most common fluid properties, water, air, which are useful for other modules and workbenches.
|
||||
|
||||
## User defined material
|
||||
|
||||
To prevent the database from becoming inefficiently large it is only limited to commonly used variables at 20 degrees Celsius at 1 atm.
|
||||
|
||||
Users can defined new material, either in Fem material card editor, or directly generate textual material file, * .FCMat, see example in this folder.
|
||||
|
||||
To enable new material, go to FreeCAD menu "Edit->Preference..." Cfd preference page (select on the left panel) and switch to materiai tab on the right.
|
||||
|
||||
Browse to your material folder, and save/apply this preference, new material will be Material with same name as FreeCAD material has higher priority,
|
||||
|
||||
so user defined` Water` material will not appear in Fem material task panel's dropbox list, just give it a different name!
|
||||
|
||||
### Edit material value
|
||||
|
||||
Please verify the fluid material properties before use. It aims to serve as a quick reference and does not aim to be an extended look up table.
|
||||
|
||||
|
||||
|
||||
## Add new material to Material module
|
||||
|
||||
1. follow examples in material folders to create new material file
|
||||
2. stick to the meta data definition in `src/Mod/Material/Templatematerial.yml` for property name
|
||||
3. add the file name into the `src/Mod/Material/CMakeLists.txt` , so the new files can be installed to the properly place during compiling and installation.
|
||||
|
||||
## Change log
|
||||
|
||||
CfdOF module authored 5 material types, values are taken from FM White (2011) Fluid Mechanics.
|
||||
|
||||
|
||||
|
||||
Currently, 3 (Water, Air, None) are merged into Fem module and maintained by Cfd module author, Qingfeng Xia
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
This is the FreeCAD simple fluid material library
|
||||
data is taken from matweb
|
||||
currently only water and air at the standard condition (20C and 1 atm) is prepared for testing
|
||||
|
||||
|
||||
CSIR team is working on CfdFluidMaterial in CFD workbench to support more complex fluid material
|
||||
|
||||
@@ -1,16 +1,24 @@
|
||||
[FCdMat]
|
||||
; see meta data definition in the file: src/Mod/Material/Templatematerial.yml
|
||||
[General]
|
||||
Name = Water
|
||||
Description = Standard distilled water properties at 20 Degrees Celsius and 1 atm
|
||||
MolarMass = 18
|
||||
Father = Gas
|
||||
ReferenceSource = ''
|
||||
|
||||
[Fluidic]
|
||||
Density = 998 kg/m^3
|
||||
DynamicViscosity = 1.003e-3 kg/m/s
|
||||
KinematicViscosity = 1.005 m^2/s
|
||||
DynamicViscosity = 1.003e-3 kg/m/s
|
||||
KinematicViscosity = 1.005e-6 m^2/s
|
||||
; PrandtlNumber is a nondimension number for CFD simulation
|
||||
PrandtlNumber = 7.56
|
||||
|
||||
[Thermal]
|
||||
SpecificHeat = 4182 J/kg/K
|
||||
ThermalConductivity = 0.591 W/m/K
|
||||
; https://en.wikipedia.org/wiki/Water
|
||||
VolumetricThermalExpansionCoefficient = 2.07e-4 m/m/K
|
||||
|
||||
SpecificHeat = 4.182 J/kg/K
|
||||
ThermalConductivity = 0.591 W/m/K
|
||||
|
||||
[Electrical]
|
||||
RelativePermittivity = 80.0
|
||||
; at 20°C and 50Hz
|
||||
|
||||
@@ -745,13 +745,38 @@ std::vector<unsigned long> MeshKernel::GetFacetPoints(const std::vector<unsigned
|
||||
points.push_back(p0);
|
||||
points.push_back(p1);
|
||||
points.push_back(p2);
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(points.begin(), points.end());
|
||||
points.erase(std::unique(points.begin(), points.end()), points.end());
|
||||
return points;
|
||||
}
|
||||
|
||||
std::vector<unsigned long> MeshKernel::GetPointFacets(const std::vector<unsigned long>& points) const
|
||||
{
|
||||
_aclPointArray.ResetFlag(MeshPoint::TMP0);
|
||||
_aclFacetArray.ResetFlag(MeshFacet::TMP0);
|
||||
for (std::vector<unsigned long>::const_iterator pI = points.begin(); pI != points.end(); ++pI)
|
||||
_aclPointArray[*pI].SetFlag(MeshPoint::TMP0);
|
||||
|
||||
// mark facets if at least one corner point is marked
|
||||
for (MeshFacetArray::_TConstIterator pF = _aclFacetArray.begin(); pF != _aclFacetArray.end(); ++pF) {
|
||||
const MeshPoint &rclP0 = _aclPointArray[pF->_aulPoints[0]];
|
||||
const MeshPoint &rclP1 = _aclPointArray[pF->_aulPoints[1]];
|
||||
const MeshPoint &rclP2 = _aclPointArray[pF->_aulPoints[2]];
|
||||
|
||||
if (rclP0.IsFlag(MeshPoint::TMP0) ||
|
||||
rclP1.IsFlag(MeshPoint::TMP0) ||
|
||||
rclP2.IsFlag(MeshPoint::TMP0)) {
|
||||
pF->SetFlag(MeshFacet::TMP0);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<unsigned long> facets;
|
||||
MeshAlgorithm(*this).GetFacetsFlag(facets, MeshFacet::TMP0);
|
||||
return facets;
|
||||
}
|
||||
|
||||
std::vector<unsigned long> MeshKernel::HasFacets (const MeshPointIterator &rclIter) const
|
||||
{
|
||||
unsigned long i, ulPtInd = rclIter.Position();
|
||||
|
||||
@@ -125,6 +125,8 @@ public:
|
||||
unsigned long &rclP1, unsigned long &rclP2) const;
|
||||
/** Returns the point indices of the given facet indices. */
|
||||
std::vector<unsigned long> GetFacetPoints(const std::vector<unsigned long>&) const;
|
||||
/** Returns the facet indices that share the given point indices. */
|
||||
std::vector<unsigned long> GetPointFacets(const std::vector<unsigned long>&) const;
|
||||
/** Returns the indices of the neighbour facets of the given facet index. */
|
||||
inline void GetFacetNeighbours (unsigned long ulIndex, unsigned long &rulNIdx0,
|
||||
unsigned long &rulNIdx1, unsigned long &rulNIdx2) const;
|
||||
|
||||
@@ -1348,6 +1348,8 @@ void CmdPartMakeFace::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
auto sketches = Gui::Selection().getObjectsOfType(App::DocumentObject::getClassTypeId(),0,3);
|
||||
if(sketches.empty())
|
||||
return;
|
||||
openCommand("Make face");
|
||||
|
||||
try {
|
||||
@@ -1636,7 +1638,10 @@ CmdPartOffset::CmdPartOffset()
|
||||
void CmdPartOffset::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
App::DocumentObject* shape = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()).front();
|
||||
auto shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId(),0,3);
|
||||
if(shapes.empty())
|
||||
return;
|
||||
App::DocumentObject* shape = shapes.front();
|
||||
std::string offset = getUniqueObjectName("Offset");
|
||||
|
||||
openCommand("Make Offset");
|
||||
@@ -1685,7 +1690,10 @@ CmdPartOffset2D::CmdPartOffset2D()
|
||||
void CmdPartOffset2D::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
App::DocumentObject* shape = getSelection().getObjectsOfType(Part::Feature::getClassTypeId(),0,3).front();
|
||||
auto shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId(),0,3);
|
||||
if(shapes.empty())
|
||||
return;
|
||||
App::DocumentObject* shape = shapes.front();
|
||||
std::string offset = getUniqueObjectName("Offset2D");
|
||||
|
||||
openCommand("Make 2D Offset");
|
||||
@@ -2153,6 +2161,8 @@ void CmdColorPerFace::activated(int iMsg)
|
||||
if (getActiveGuiDocument()->getInEdit())
|
||||
getActiveGuiDocument()->resetEdit();
|
||||
std::vector<App::DocumentObject*> sel = Gui::Selection().getObjectsOfType(Part::Feature::getClassTypeId());
|
||||
if(sel.empty())
|
||||
return;
|
||||
Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(sel.front());
|
||||
// FIXME: Need a way to force 'Color' edit mode
|
||||
// #0000477: Proper interface for edit modes of view provider
|
||||
|
||||
@@ -47,6 +47,7 @@ grbl_post.export(object, "/path/to/file.ncc")
|
||||
OUTPUT_COMMENTS = True # default output of comments in output gCode file
|
||||
OUTPUT_HEADER = True # default output header in output gCode file
|
||||
OUTPUT_LINE_NUMBERS = False # default doesn't output line numbers in output gCode file
|
||||
OUTPUT_BCNC = False # default doesn't add bCNC operation block headers in output gCode file
|
||||
SHOW_EDITOR = True # default show the resulting file dialog output in GUI
|
||||
PRECISION = 3 # Default precision for metric (see http://linuxcnc.org/docs/2.7/html/gcode/overview.html#_g_code_best_practices)
|
||||
TRANSLATE_DRILL_CYCLES = False # If true, G81, G82 & G83 are translated in G0/G1 moves
|
||||
@@ -97,6 +98,8 @@ parser.add_argument('--inches', action='store_true', help='Convert o
|
||||
parser.add_argument('--tool-change', action='store_true', help='Insert M6 for all tool changes')
|
||||
parser.add_argument('--wait-for-spindle', type=int, default=0, help='Wait for spindle to reach desired speed after M3 / M4, default=0')
|
||||
parser.add_argument('--return-to', default='', help='Move to the specified coordinates at the end, e.g. --return-to=0,0')
|
||||
parser.add_argument('--bcnc', action='store_true', help='Add Job operations as bCNC block headers. Consider suppressing existing comments: Add argument --no-comments')
|
||||
parser.add_argument('--no-bcnc', action='store_true', help='suppress bCNC block header output (default)')
|
||||
TOOLTIP_ARGS = parser.format_help()
|
||||
|
||||
|
||||
@@ -135,6 +138,7 @@ def processArguments(argstring):
|
||||
global OUTPUT_TOOL_CHANGE
|
||||
global SPINDLE_WAIT
|
||||
global RETURN_TO
|
||||
global OUTPUT_BCNC
|
||||
|
||||
try:
|
||||
args = parser.parse_args(shlex.split(argstring))
|
||||
@@ -177,6 +181,10 @@ def processArguments(argstring):
|
||||
if len(RETURN_TO) != 2:
|
||||
RETURN_TO = None
|
||||
print("--return-to coordinates must be specified as <x>,<y>, ignoring")
|
||||
if args.bcnc:
|
||||
OUTPUT_BCNC = True
|
||||
if args.no_bcnc:
|
||||
OUTPUT_BCNC = False
|
||||
|
||||
|
||||
except Exception as e:
|
||||
@@ -243,6 +251,10 @@ def export(objectslist, filename, argstring):
|
||||
return
|
||||
|
||||
# do the pre_op
|
||||
if OUTPUT_BCNC:
|
||||
gcode += linenumber() + "(Block-name: " + obj.Label + ")\n"
|
||||
gcode += linenumber() + "(Block-expand: 0)\n"
|
||||
gcode += linenumber() + "(Block-enable: 1)\n"
|
||||
if OUTPUT_COMMENTS:
|
||||
gcode += linenumber() + "(Begin operation: " + obj.Label + ")\n"
|
||||
for line in PRE_OPERATION.splitlines(True):
|
||||
@@ -258,6 +270,10 @@ def export(objectslist, filename, argstring):
|
||||
gcode += linenumber() + line
|
||||
|
||||
# do the post_amble
|
||||
if OUTPUT_BCNC:
|
||||
gcode += linenumber() + "(Block-name: post_amble)\n"
|
||||
gcode += linenumber() + "(Block-expand: 0)\n"
|
||||
gcode += linenumber() + "(Block-enable: 1)\n"
|
||||
if OUTPUT_COMMENTS:
|
||||
gcode += linenumber() + "(Begin postamble)\n"
|
||||
for line in POSTAMBLE.splitlines(True):
|
||||
|
||||
@@ -328,6 +328,45 @@ bool CmdSketcherLeaveSketch::isActive(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherStopOperation)
|
||||
|
||||
CmdSketcherStopOperation::CmdSketcherStopOperation()
|
||||
: Command("Sketcher_StopOperation")
|
||||
{
|
||||
sAppModule = "Sketcher";
|
||||
sGroup = QT_TR_NOOP("Sketcher");
|
||||
sMenuText = QT_TR_NOOP("Stop operation");
|
||||
sToolTipText = QT_TR_NOOP("Stop current operation");
|
||||
sWhatsThis = "Sketcher_StopOperation";
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "process-stop";
|
||||
eType = 0;
|
||||
}
|
||||
|
||||
void CmdSketcherStopOperation::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
Gui::Document *doc = getActiveGuiDocument();
|
||||
|
||||
if (doc) {
|
||||
SketcherGui::ViewProviderSketch* vp = dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
|
||||
if (vp) {
|
||||
vp->purgeHandler();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CmdSketcherStopOperation::isActive(void)
|
||||
{
|
||||
Gui::Document *doc = getActiveGuiDocument();
|
||||
if (doc) {
|
||||
SketcherGui::ViewProviderSketch* vp = dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
|
||||
if (vp)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
DEF_STD_CMD_A(CmdSketcherReorientSketch)
|
||||
|
||||
CmdSketcherReorientSketch::CmdSketcherReorientSketch()
|
||||
@@ -872,6 +911,7 @@ void CreateSketcherCommands(void)
|
||||
rcCmdMgr.addCommand(new CmdSketcherNewSketch());
|
||||
rcCmdMgr.addCommand(new CmdSketcherEditSketch());
|
||||
rcCmdMgr.addCommand(new CmdSketcherLeaveSketch());
|
||||
rcCmdMgr.addCommand(new CmdSketcherStopOperation());
|
||||
rcCmdMgr.addCommand(new CmdSketcherReorientSketch());
|
||||
rcCmdMgr.addCommand(new CmdSketcherMapSketch());
|
||||
rcCmdMgr.addCommand(new CmdSketcherViewSketch());
|
||||
|
||||
@@ -401,6 +401,7 @@ void ViewProviderSketch::deactivateHandler()
|
||||
std::vector<Base::Vector2d> editCurve;
|
||||
editCurve.clear();
|
||||
drawEdit(editCurve); // erase any line
|
||||
resetPositionText();
|
||||
edit->sketchHandler->deactivated(this);
|
||||
edit->sketchHandler->unsetCursor();
|
||||
delete(edit->sketchHandler);
|
||||
|
||||
@@ -90,6 +90,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
||||
addSketcherWorkbenchVirtualSpace(*virtualspace);
|
||||
|
||||
addSketcherWorkbenchSketchActions( *sketch );
|
||||
*sketch << "Sketcher_StopOperation";
|
||||
*sketch << geom
|
||||
<< cons
|
||||
<< consaccel
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD,sys
|
||||
import FreeCADGui,sys
|
||||
# MRU will be given before this script is run
|
||||
rf=FreeCAD.ParamGet("User parameter:BaseApp/Preferences/RecentFiles")
|
||||
FreeCAD.loadFile(rf.GetString("MRU"+str(MRU)))
|
||||
FreeCADGui.loadFile(rf.GetString("MRU"+str(MRU)))
|
||||
|
||||
from StartPage import StartPage
|
||||
StartPage.postStart()
|
||||
|
||||
@@ -283,8 +283,8 @@ int DrawViewBalloon::prefEnd(void) const
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Decorations");
|
||||
int length = hGrp->GetFloat("BalloonArrow", 5.0);
|
||||
return length;
|
||||
int end = hGrp->GetInt("BalloonArrow", 0);
|
||||
return end;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1132,7 +1132,7 @@ CmdTechDrawArchView::CmdTechDrawArchView()
|
||||
{
|
||||
// setting the Gui eye-candy
|
||||
sGroup = QT_TR_NOOP("TechDraw");
|
||||
sMenuText = QT_TR_NOOP("Insert Section Plane");
|
||||
sMenuText = QT_TR_NOOP("Insert Arch Workbench Object");
|
||||
sToolTipText = QT_TR_NOOP("Insert a View of a Section Plane from Arch Workbench");
|
||||
sWhatsThis = "TechDraw_NewArch";
|
||||
sStatusTip = sToolTipText;
|
||||
@@ -1241,7 +1241,7 @@ CmdTechDrawExportPageSVG::CmdTechDrawExportPageSVG()
|
||||
: Command("TechDraw_ExportPageSVG")
|
||||
{
|
||||
sGroup = QT_TR_NOOP("File");
|
||||
sMenuText = QT_TR_NOOP("Export page as SVG");
|
||||
sMenuText = QT_TR_NOOP("Export Page as SVG");
|
||||
sToolTipText = sMenuText;
|
||||
sWhatsThis = "TechDraw_ExportPageSVG";
|
||||
sStatusTip = sToolTipText;
|
||||
@@ -1285,7 +1285,7 @@ CmdTechDrawExportPageDXF::CmdTechDrawExportPageDXF()
|
||||
: Command("TechDraw_ExportPageDXF")
|
||||
{
|
||||
sGroup = QT_TR_NOOP("File");
|
||||
sMenuText = QT_TR_NOOP("Export page as DXF");
|
||||
sMenuText = QT_TR_NOOP("Export Page as DXF");
|
||||
sToolTipText = sMenuText;
|
||||
sWhatsThis = "TechDraw_ExportPageDXF";
|
||||
sStatusTip = sToolTipText;
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>558</width>
|
||||
<height>609</height>
|
||||
<width>440</width>
|
||||
<height>500</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@@ -28,7 +28,7 @@
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="gbScale">
|
||||
<property name="sizePolicy">
|
||||
@@ -40,7 +40,7 @@
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
<height>113</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
@@ -70,7 +70,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Default scale type for new Views</string>
|
||||
<string>Default scale for new views</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>DefaultScaleType</cstring>
|
||||
@@ -85,12 +85,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Custom</string>
|
||||
<string>Auto</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Auto</string>
|
||||
<string>Custom</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
@@ -104,7 +104,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Default scale for new Views if Scale Type is Custom</string>
|
||||
<string>Default scale for views if Scale Type is Custom</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
@@ -113,7 +113,7 @@
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
@@ -153,7 +153,7 @@
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>4</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
@@ -208,225 +208,10 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QGroupBox" name="gb_SizeAdj">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Size Adjustments</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_3" columnstretch="1,0,1">
|
||||
<item row="1" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbCenterScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Size of CenterMarks. Multiplier of Vertex size.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>CenterMarkScale</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/Decorations</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbToleranceScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Tolerance font size adjustment. Multiplier of Dimension text size.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>TolSizeAdjust</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/Dimensions</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Vertex Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Center Mark Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="lbl_LabelFont">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Tolerance Text Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Template Edit Mark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbVertexScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Scale of Vertex dots. Multiplies line weight.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>5.000000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>VertexScale</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/General</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbTemplateMark">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Size of Template Field Edit click handles in mm</p></body></html></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>3.000000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>TemplateDotSize</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/General</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="gb_Selection">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@@ -434,7 +219,7 @@
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
<height>113</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
@@ -546,7 +331,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Size of selection area around edges.</string>
|
||||
<string>Size of selection area around edges</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
@@ -586,7 +371,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Selection area around Center Marks</string>
|
||||
<string>Selection area around center marks</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
@@ -623,6 +408,227 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QGroupBox" name="gb_SizeAdj">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>141</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Size Adjustments</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_3" columnstretch="1,0,1">
|
||||
<item row="1" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbCenterScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Size of center marks. Multiplier of vertex size.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>CenterMarkScale</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/Decorations</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbToleranceScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Tolerance font size adjustment. Multiplier of dimension font size.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>TolSizeAdjust</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/Dimensions</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Vertex Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Center Mark Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="lbl_LabelFont">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Tolerance Text Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Template Edit Mark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbVertexScale">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Scale of vertex dots. Multiplier of line width.</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>5.000000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>VertexScale</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/General</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="pdsbTemplateMark">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Size of template field click handles in mm</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>3.000000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>TemplateDotSize</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/TechDraw/General</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="font">
|
||||
@@ -649,8 +655,8 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
<width>17</width>
|
||||
<height>48</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
|
||||
@@ -6,20 +6,20 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>521</width>
|
||||
<height>500</height>
|
||||
<width>440</width>
|
||||
<height>268</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>TechDraw Advanced</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="gbDim">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
<height>141</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
@@ -240,21 +240,8 @@ can be a performance penalty in complex models.</string>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
@@ -272,6 +259,19 @@ can be a performance penalty in complex models.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>558</width>
|
||||
<height>500</height>
|
||||
<width>441</width>
|
||||
<height>333</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@@ -19,7 +19,7 @@
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>400</height>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -28,32 +28,7 @@
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Items in italics are default values for new objects. They have no effect on existing objects.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="gbMisc">
|
||||
<property name="sizePolicy">
|
||||
@@ -65,7 +40,7 @@
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>150</height>
|
||||
<height>225</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
@@ -397,7 +372,26 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_20">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Items in italics are default values for new objects. They have no effect on existing objects.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
||||
@@ -22,23 +22,26 @@
|
||||
|
||||
#include "PreCompiled.h"
|
||||
#ifndef _PreComp_
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <TopoDS_Compound.hxx>
|
||||
# include <TopoDS_Shape.hxx>
|
||||
# include <TopoDS_Edge.hxx>
|
||||
# include <TopoDS.hxx>
|
||||
# include <BRepAdaptor_Curve.hxx>
|
||||
# include <Precision.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <TopoDS_Compound.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopoDS_Edge.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <BRepAdaptor_Curve.hxx>
|
||||
#include <Precision.hxx>
|
||||
|
||||
# include <QGraphicsScene>
|
||||
# include <QGraphicsSceneMouseEvent>
|
||||
# include <QGraphicsItem>
|
||||
# include <QPainter>
|
||||
# include <QPaintDevice>
|
||||
# include <QSvgGenerator>
|
||||
#include <QRegExp>
|
||||
#include <QGraphicsScene>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include <QGraphicsItem>
|
||||
#include <QPainter>
|
||||
#include <QPaintDevice>
|
||||
#include <QSvgGenerator>
|
||||
#include <QRegExp>
|
||||
#include <QTextDocument>
|
||||
#include <QTextFrame>
|
||||
#include <QTextBlock>
|
||||
|
||||
# include <math.h>
|
||||
# include <math.h>
|
||||
#endif
|
||||
|
||||
#include <App/Application.h>
|
||||
@@ -77,7 +80,8 @@ using namespace TechDrawGui;
|
||||
|
||||
//**************************************************************
|
||||
QGIRichAnno::QGIRichAnno(QGraphicsItem* myParent,
|
||||
TechDraw::DrawRichAnno* anno)
|
||||
TechDraw::DrawRichAnno* anno) :
|
||||
m_isExporting(false)
|
||||
{
|
||||
setHandlesChildEvents(false);
|
||||
setAcceptHoverEvents(false);
|
||||
@@ -192,41 +196,49 @@ void QGIRichAnno::setTextItem()
|
||||
{
|
||||
// Base::Console().Message("QGIRA::setTextItem() - %s\n",getViewName());
|
||||
TechDraw::DrawRichAnno* annoFeat = getFeature();
|
||||
|
||||
//convert point font sizes to (Rez,mm) font sizes
|
||||
QRegExp rxFontSize(QString::fromUtf8("font-size:([0-9]*)pt;"));
|
||||
QString inHtml = QString::fromUtf8(annoFeat->AnnoText.getValue());
|
||||
QString match;
|
||||
double mmPerPoint = 0.353;
|
||||
double sizeConvert = Rez::getRezFactor() * mmPerPoint;
|
||||
int pos = 0;
|
||||
QStringList findList;
|
||||
QStringList replList;
|
||||
while ((pos = rxFontSize.indexIn(inHtml, pos)) != -1) {
|
||||
QString found = rxFontSize.cap(0);
|
||||
findList << found;
|
||||
QString qsOldSize = rxFontSize.cap(1);
|
||||
|
||||
QString repl = found;
|
||||
double newSize = qsOldSize.toDouble();
|
||||
newSize = newSize * sizeConvert;
|
||||
QString qsNewSize = QString::number(newSize, 'f', 2);
|
||||
repl.replace(qsOldSize,qsNewSize);
|
||||
replList << repl;
|
||||
pos += rxFontSize.matchedLength();
|
||||
}
|
||||
QString outHtml = inHtml;
|
||||
int iRepl = 0;
|
||||
//TODO: check list for duplicates?
|
||||
for ( ; iRepl < findList.size(); iRepl++) {
|
||||
outHtml = outHtml.replace(findList[iRepl], replList[iRepl]);
|
||||
//don't do this multiplication if exporting to SVG as other apps interpret
|
||||
//font sizes differently from QGraphicsTextItem (?)
|
||||
if (!getExporting()) {
|
||||
//convert point font sizes to (Rez,mm) font sizes
|
||||
QRegExp rxFontSize(QString::fromUtf8("font-size:([0-9]*)pt;"));
|
||||
QString match;
|
||||
double mmPerPoint = 0.353;
|
||||
double sizeConvert = Rez::getRezFactor() * mmPerPoint;
|
||||
int pos = 0;
|
||||
QStringList findList;
|
||||
QStringList replList;
|
||||
while ((pos = rxFontSize.indexIn(inHtml, pos)) != -1) {
|
||||
QString found = rxFontSize.cap(0);
|
||||
findList << found;
|
||||
QString qsOldSize = rxFontSize.cap(1);
|
||||
|
||||
QString repl = found;
|
||||
double newSize = qsOldSize.toDouble();
|
||||
newSize = newSize * sizeConvert;
|
||||
QString qsNewSize = QString::number(newSize, 'f', 2);
|
||||
repl.replace(qsOldSize,qsNewSize);
|
||||
replList << repl;
|
||||
pos += rxFontSize.matchedLength();
|
||||
}
|
||||
QString outHtml = inHtml;
|
||||
int iRepl = 0;
|
||||
//TODO: check list for duplicates?
|
||||
for ( ; iRepl < findList.size(); iRepl++) {
|
||||
outHtml = outHtml.replace(findList[iRepl], replList[iRepl]);
|
||||
}
|
||||
|
||||
m_text->setTextWidth(Rez::guiX(annoFeat->MaxWidth.getValue()));
|
||||
m_text->setHtml(outHtml);
|
||||
} else {
|
||||
//TODO: fix line spacing. common solutions (style sheet,
|
||||
// QTextBlock::setLineHeight(150, QTextBlockFormat::ProportionalHeight)) don't help
|
||||
double realWidth = m_text->boundingRect().width();
|
||||
m_text->setTextWidth(realWidth);
|
||||
m_text->setHtml(inHtml);
|
||||
}
|
||||
|
||||
m_text->setHtml(outHtml);
|
||||
|
||||
m_text->setTextWidth(Rez::guiX(annoFeat->MaxWidth.getValue()));
|
||||
|
||||
// m_text->showBox(annoFeat->ShowFrame.getValue());
|
||||
if (annoFeat->ShowFrame.getValue()) {
|
||||
QRectF r = m_text->boundingRect().adjusted(1,1,-1,-1);
|
||||
m_rect->setPen(rectPen());
|
||||
|
||||
@@ -80,6 +80,9 @@ public:
|
||||
virtual TechDraw::DrawRichAnno* getFeature(void);
|
||||
QPen rectPen() const;
|
||||
|
||||
void setExporting(bool b) { m_isExporting = b; }
|
||||
bool getExporting(void) { return m_isExporting; }
|
||||
|
||||
|
||||
public Q_SLOTS:
|
||||
/* void textDragging(void);*/
|
||||
@@ -92,6 +95,8 @@ protected:
|
||||
virtual QVariant itemChange( GraphicsItemChange change,
|
||||
const QVariant &value ) override;
|
||||
|
||||
bool m_isExporting;
|
||||
|
||||
protected:
|
||||
/* QGMText* m_text;*/
|
||||
QGCustomText* m_text;
|
||||
|
||||
@@ -763,9 +763,13 @@ void QGVPage::setExporting(bool enable)
|
||||
QList<QGraphicsItem*> sceneItems = scene()->items();
|
||||
for (auto& qgi:sceneItems) {
|
||||
QGIViewPart* qgiPart = dynamic_cast<QGIViewPart *>(qgi);
|
||||
QGIRichAnno* qgiRTA = dynamic_cast<QGIRichAnno *>(qgi);
|
||||
if(qgiPart) {
|
||||
qgiPart->setExporting(enable);
|
||||
}
|
||||
if (qgiRTA) {
|
||||
qgiRTA->setExporting(enable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,141 +1,546 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns: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="64" height="64" id="svg249" sodipodi:version="0.32" inkscape:version="0.48.5 r10040" sodipodi:docname="preferences-techdraw.svg" inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png" inkscape:export-xdpi="240.00000" inkscape:export-ydpi="240.00000" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1">
|
||||
<defs id="defs3">
|
||||
<linearGradient id="linearGradient5048">
|
||||
<stop style="stop-color:black;stop-opacity:0;" 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"/>
|
||||
<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"
|
||||
version="1.1"
|
||||
id="svg249"
|
||||
height="64"
|
||||
width="64">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
id="stop5050"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop5056" />
|
||||
<stop
|
||||
id="stop5052"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient4542">
|
||||
<stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop4544"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop4546"/>
|
||||
<linearGradient
|
||||
id="linearGradient4542">
|
||||
<stop
|
||||
id="stop4544"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4546"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient4542" id="radialGradient4548" cx="24.306795" cy="42.07798" fx="24.306795" fy="42.07798" r="15.821514" gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" gradientUnits="userSpaceOnUse"/>
|
||||
<linearGradient id="linearGradient15662">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" id="stop15664"/>
|
||||
<stop style="stop-color:#f8f8f8;stop-opacity:1.0000000;" offset="1.0000000" id="stop15666"/>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
|
||||
r="15.821514"
|
||||
fy="42.07798"
|
||||
fx="24.306795"
|
||||
cy="42.07798"
|
||||
cx="24.306795"
|
||||
id="radialGradient4548"
|
||||
xlink:href="#linearGradient4542" />
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
id="stop15664"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop15666"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="64.567902" fx="20.892099" r="5.257" cy="64.567902" cx="20.892099" id="aigrd3">
|
||||
<stop id="stop15573" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15575" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
id="aigrd3"
|
||||
cx="20.892099"
|
||||
cy="64.567902"
|
||||
r="5.257"
|
||||
fx="20.892099"
|
||||
fy="64.567902"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15573" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15575" />
|
||||
</radialGradient>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="114.5684" fx="20.892099" r="5.256" cy="114.5684" cx="20.892099" id="aigrd2">
|
||||
<stop id="stop15566" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15568" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
id="aigrd2"
|
||||
cx="20.892099"
|
||||
cy="114.5684"
|
||||
r="5.256"
|
||||
fx="20.892099"
|
||||
fy="114.5684"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15566" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15568" />
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient269">
|
||||
<stop style="stop-color:#a3a3a3;stop-opacity:1.0000000;" offset="0.0000000" id="stop270"/>
|
||||
<stop style="stop-color:#4c4c4c;stop-opacity:1.0000000;" offset="1.0000000" id="stop271"/>
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
id="stop270"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop271"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient259">
|
||||
<stop style="stop-color:#fafafa;stop-opacity:1.0000000;" offset="0.0000000" id="stop260"/>
|
||||
<stop style="stop-color:#bbbbbb;stop-opacity:1.0000000;" offset="1.0000000" id="stop261"/>
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
id="stop260"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop261"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient12512">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" id="stop12513"/>
|
||||
<stop style="stop-color:#fff520;stop-opacity:0.89108908;" offset="0.50000000" id="stop12517"/>
|
||||
<stop style="stop-color:#fff300;stop-opacity:0.0000000;" offset="1.0000000" id="stop12514"/>
|
||||
<linearGradient
|
||||
id="linearGradient12512">
|
||||
<stop
|
||||
id="stop12513"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop12517"
|
||||
offset="0.50000000"
|
||||
style="stop-color:#fff520;stop-opacity:0.89108908;" />
|
||||
<stop
|
||||
id="stop12514"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#fff300;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient12512" id="radialGradient278" gradientUnits="userSpaceOnUse" cx="55" cy="125" fx="55" fy="125" r="14.375"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient5048-7" id="linearGradient5027-1" 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="linearGradient5048-7">
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050-4"/>
|
||||
<stop id="stop5056-0" offset="0.5" style="stop-color:black;stop-opacity:1;"/>
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052-9"/>
|
||||
<radialGradient
|
||||
r="14.375"
|
||||
fy="125"
|
||||
fx="55"
|
||||
cy="125"
|
||||
cx="55"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient278"
|
||||
xlink:href="#linearGradient12512" />
|
||||
<linearGradient
|
||||
y2="609.50507"
|
||||
x2="302.85715"
|
||||
y1="366.64789"
|
||||
x1="302.85715"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5027-1"
|
||||
xlink:href="#linearGradient5048-7" />
|
||||
<linearGradient
|
||||
id="linearGradient5048-7">
|
||||
<stop
|
||||
id="stop5050-4"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop5056-0" />
|
||||
<stop
|
||||
id="stop5052-9"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient5060-8" id="radialGradient5029-4" 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 inkscape:collect="always" id="linearGradient5060-8">
|
||||
<stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062-8"/>
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064-2"/>
|
||||
<radialGradient
|
||||
r="117.14286"
|
||||
fy="486.64789"
|
||||
fx="605.71429"
|
||||
cy="486.64789"
|
||||
cx="605.71429"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient5029-4"
|
||||
xlink:href="#linearGradient5060-8" />
|
||||
<linearGradient
|
||||
id="linearGradient5060-8">
|
||||
<stop
|
||||
id="stop5062-8"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5064-2"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="117.14286" fy="486.64789" fx="605.71429" cy="486.64789" cx="605.71429" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" gradientUnits="userSpaceOnUse" id="radialGradient3277" xlink:href="#linearGradient5060-8" inkscape:collect="always"/>
|
||||
<radialGradient r="86.70845" fy="35.736916" fx="33.966679" cy="35.736916" cx="33.966679" gradientTransform="matrix(1.3213634,0,0,1.4243677,-18.082716,-65.975171)" gradientUnits="userSpaceOnUse" id="radialGradient15658-4" xlink:href="#linearGradient259-5" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient259-5">
|
||||
<stop style="stop-color:#fafafa;stop-opacity:1.0000000;" offset="0.0000000" id="stop260-5"/>
|
||||
<stop style="stop-color:#bbbbbb;stop-opacity:1.0000000;" offset="1.0000000" id="stop261-1"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060-8"
|
||||
id="radialGradient3277"
|
||||
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" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient259-5"
|
||||
id="radialGradient15658-4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3213634,0,0,1.4243677,-18.082716,-65.975171)"
|
||||
cx="33.966679"
|
||||
cy="35.736916"
|
||||
fx="33.966679"
|
||||
fy="35.736916"
|
||||
r="86.70845" />
|
||||
<linearGradient
|
||||
id="linearGradient259-5">
|
||||
<stop
|
||||
id="stop260-5"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop261-1"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="37.751713" fy="37.388847" fx="3.3431637" cy="37.388847" cx="3.3431637" gradientTransform="matrix(1.3320666,0,0,1.4129236,-13.469186,-65.090761)" gradientUnits="userSpaceOnUse" id="radialGradient15656-7" xlink:href="#linearGradient269-1" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient269-1">
|
||||
<stop style="stop-color:#a3a3a3;stop-opacity:1.0000000;" offset="0.0000000" id="stop270-1"/>
|
||||
<stop style="stop-color:#4c4c4c;stop-opacity:1.0000000;" offset="1.0000000" id="stop271-5"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient269-1"
|
||||
id="radialGradient15656-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3320666,0,0,1.4129236,-13.469186,-65.090761)"
|
||||
cx="3.3431637"
|
||||
cy="37.388847"
|
||||
fx="3.3431637"
|
||||
fy="37.388847"
|
||||
r="37.751713" />
|
||||
<linearGradient
|
||||
id="linearGradient269-1">
|
||||
<stop
|
||||
id="stop270-1"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop271-5"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="38.158695" fy="7.2678967" fx="8.1435566" cy="7.2678967" cx="8.1435566" gradientTransform="matrix(1.2992848,0,0,1.378488,-12.78616,-64.242471)" gradientUnits="userSpaceOnUse" id="radialGradient15668-2" xlink:href="#linearGradient15662-7" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient15662-7">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" id="stop15664-6"/>
|
||||
<stop style="stop-color:#f8f8f8;stop-opacity:1.0000000;" offset="1.0000000" id="stop15666-1"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient15662-7"
|
||||
id="radialGradient15668-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.2992848,0,0,1.378488,-12.78616,-64.242471)"
|
||||
cx="8.1435566"
|
||||
cy="7.2678967"
|
||||
fx="8.1435566"
|
||||
fy="7.2678967"
|
||||
r="38.158695" />
|
||||
<linearGradient
|
||||
id="linearGradient15662-7">
|
||||
<stop
|
||||
id="stop15664-6"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop15666-1"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#aigrd2-2" id="radialGradient2283-4" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" cx="20.892099" cy="114.5684" fx="20.892099" fy="114.5684" r="5.256"/>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="114.5684" fx="20.892099" r="5.256" cy="114.5684" cx="20.892099" id="aigrd2-2">
|
||||
<stop id="stop15566-3" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15568-2" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
r="5.256"
|
||||
fy="114.5684"
|
||||
fx="20.892099"
|
||||
cy="114.5684"
|
||||
cx="20.892099"
|
||||
gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2283-4"
|
||||
xlink:href="#aigrd2-2" />
|
||||
<radialGradient
|
||||
id="aigrd2-2"
|
||||
cx="20.892099"
|
||||
cy="114.5684"
|
||||
r="5.256"
|
||||
fx="20.892099"
|
||||
fy="114.5684"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15566-3" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15568-2" />
|
||||
</radialGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#aigrd3-1" id="radialGradient2285-2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" cx="20.892099" cy="64.567902" fx="20.892099" fy="64.567902" r="5.257"/>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="64.567902" fx="20.892099" r="5.257" cy="64.567902" cx="20.892099" id="aigrd3-1">
|
||||
<stop id="stop15573-6" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15575-8" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
r="5.257"
|
||||
fy="64.567902"
|
||||
fx="20.892099"
|
||||
cy="64.567902"
|
||||
cx="20.892099"
|
||||
gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2285-2"
|
||||
xlink:href="#aigrd3-1" />
|
||||
<radialGradient
|
||||
id="aigrd3-1"
|
||||
cx="20.892099"
|
||||
cy="64.567902"
|
||||
r="5.257"
|
||||
fx="20.892099"
|
||||
fy="64.567902"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15573-6" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15575-8" />
|
||||
</radialGradient>
|
||||
<radialGradient r="117.14286" fy="486.64789" fx="605.71429" cy="486.64789" cx="605.71429" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" gradientUnits="userSpaceOnUse" id="radialGradient3187" xlink:href="#linearGradient5060-8" inkscape:collect="always"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#aigrd2-7" id="radialGradient2283" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" cx="20.892099" cy="114.5684" fx="20.892099" fy="114.5684" r="5.256"/>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="114.5684" fx="20.892099" r="5.256" cy="114.5684" cx="20.892099" id="aigrd2-7">
|
||||
<stop id="stop15566-4" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15568-27" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060-8"
|
||||
id="radialGradient3187"
|
||||
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" />
|
||||
<radialGradient
|
||||
r="5.256"
|
||||
fy="114.5684"
|
||||
fx="20.892099"
|
||||
cy="114.5684"
|
||||
cx="20.892099"
|
||||
gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2283"
|
||||
xlink:href="#aigrd2-7" />
|
||||
<radialGradient
|
||||
id="aigrd2-7"
|
||||
cx="20.892099"
|
||||
cy="114.5684"
|
||||
r="5.256"
|
||||
fx="20.892099"
|
||||
fy="114.5684"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15566-4" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15568-27" />
|
||||
</radialGradient>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#aigrd3-7" id="radialGradient2285" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)" cx="20.892099" cy="64.567902" fx="20.892099" fy="64.567902" r="5.257"/>
|
||||
<radialGradient gradientUnits="userSpaceOnUse" fy="64.567902" fx="20.892099" r="5.257" cy="64.567902" cx="20.892099" id="aigrd3-7">
|
||||
<stop id="stop15573-9" style="stop-color:#F0F0F0" offset="0"/>
|
||||
<stop id="stop15575-3" style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000"/>
|
||||
<radialGradient
|
||||
r="5.257"
|
||||
fy="64.567902"
|
||||
fx="20.892099"
|
||||
cy="64.567902"
|
||||
cx="20.892099"
|
||||
gradientTransform="matrix(0.229703,0,0,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2285"
|
||||
xlink:href="#aigrd3-7" />
|
||||
<radialGradient
|
||||
id="aigrd3-7"
|
||||
cx="20.892099"
|
||||
cy="64.567902"
|
||||
r="5.257"
|
||||
fx="20.892099"
|
||||
fy="64.567902"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15573-9" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15575-3" />
|
||||
</radialGradient>
|
||||
<radialGradient r="38.158695" fy="7.2678967" fx="8.1435566" cy="7.2678967" cx="8.1435566" gradientTransform="matrix(1.3004371,0,0,1.4315028,-12.790082,-64.443403)" gradientUnits="userSpaceOnUse" id="radialGradient15668" xlink:href="#linearGradient15662-1" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient15662-1">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" id="stop15664-9"/>
|
||||
<stop style="stop-color:#f8f8f8;stop-opacity:1.0000000;" offset="1.0000000" id="stop15666-8"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient15662-1"
|
||||
id="radialGradient15668"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3004371,0,0,1.4315028,-12.790082,-64.443403)"
|
||||
cx="8.1435566"
|
||||
cy="7.2678967"
|
||||
fx="8.1435566"
|
||||
fy="7.2678967"
|
||||
r="38.158695" />
|
||||
<linearGradient
|
||||
id="linearGradient15662-1">
|
||||
<stop
|
||||
id="stop15664-9"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop15666-8"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="86.70845" fy="35.736916" fx="33.966679" cy="35.736916" cx="33.966679" gradientTransform="matrix(1.3225497,0,0,1.4752117,-18.091663,-66.151728)" gradientUnits="userSpaceOnUse" id="radialGradient15658" xlink:href="#linearGradient259-6" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient259-6">
|
||||
<stop style="stop-color:#fafafa;stop-opacity:1.0000000;" offset="0.0000000" id="stop260-50"/>
|
||||
<stop style="stop-color:#bbbbbb;stop-opacity:1.0000000;" offset="1.0000000" id="stop261-2"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient259-6"
|
||||
id="radialGradient15658"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3225497,0,0,1.4752117,-18.091663,-66.151728)"
|
||||
cx="33.966679"
|
||||
cy="35.736916"
|
||||
fx="33.966679"
|
||||
fy="35.736916"
|
||||
r="86.70845" />
|
||||
<linearGradient
|
||||
id="linearGradient259-6">
|
||||
<stop
|
||||
id="stop260-50"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop261-2"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="37.751713" fy="37.388847" fx="3.3431637" cy="37.388847" cx="3.3431637" gradientTransform="matrix(1.3332625,0,0,1.4633592,-13.473992,-65.235757)" gradientUnits="userSpaceOnUse" id="radialGradient15656" xlink:href="#linearGradient269-8" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient269-8">
|
||||
<stop style="stop-color:#a3a3a3;stop-opacity:1.0000000;" offset="0.0000000" id="stop270-6"/>
|
||||
<stop style="stop-color:#4c4c4c;stop-opacity:1.0000000;" offset="1.0000000" id="stop271-0"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient269-8"
|
||||
id="radialGradient15656"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3332625,0,0,1.4633592,-13.473992,-65.235757)"
|
||||
cx="3.3431637"
|
||||
cy="37.388847"
|
||||
fx="3.3431637"
|
||||
fy="37.388847"
|
||||
r="37.751713" />
|
||||
<linearGradient
|
||||
id="linearGradient269-8">
|
||||
<stop
|
||||
id="stop270-6"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop271-0"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient5048-2" 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="linearGradient5048-2">
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="0" id="stop5050-48"/>
|
||||
<stop id="stop5056-6" offset="0.5" style="stop-color:black;stop-opacity:1;"/>
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5052-5"/>
|
||||
<linearGradient
|
||||
y2="609.50507"
|
||||
x2="302.85715"
|
||||
y1="366.64789"
|
||||
x1="302.85715"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient5027"
|
||||
xlink:href="#linearGradient5048-2" />
|
||||
<linearGradient
|
||||
id="linearGradient5048-2">
|
||||
<stop
|
||||
id="stop5050-48"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop5056-6" />
|
||||
<stop
|
||||
id="stop5052-5"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient inkscape:collect="always" 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 inkscape:collect="always" id="linearGradient5060">
|
||||
<stop style="stop-color:black;stop-opacity:1;" offset="0" id="stop5062"/>
|
||||
<stop style="stop-color:black;stop-opacity:0;" offset="1" id="stop5064"/>
|
||||
<radialGradient
|
||||
r="117.14286"
|
||||
fy="486.64789"
|
||||
fx="605.71429"
|
||||
cy="486.64789"
|
||||
cx="605.71429"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient5029"
|
||||
xlink:href="#linearGradient5060" />
|
||||
<linearGradient
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
id="stop5062"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5064"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient r="117.14286" fy="486.64789" fx="605.71429" cy="486.64789" cx="605.71429" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" gradientUnits="userSpaceOnUse" id="radialGradient3277-0" xlink:href="#linearGradient5060" inkscape:collect="always"/>
|
||||
<radialGradient r="117.14286" fy="486.64789" fx="605.71429" cy="486.64789" cx="605.71429" gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" gradientUnits="userSpaceOnUse" id="radialGradient3255" xlink:href="#linearGradient5060" inkscape:collect="always"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3775" id="linearGradient3781" x1="10" y1="39.999996" x2="53" y2="25.999996" gradientUnits="userSpaceOnUse" gradientTransform="translate(-48,3.8e-6)"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3775">
|
||||
<stop style="stop-color:#d3d7cf;stop-opacity:1;" offset="0" id="stop3777"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop3779"/>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient3277-0"
|
||||
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" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient3255"
|
||||
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
|
||||
gradientTransform="translate(-48,3.8e-6)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="25.999996"
|
||||
x2="53"
|
||||
y1="39.999996"
|
||||
x1="10"
|
||||
id="linearGradient3781"
|
||||
xlink:href="#linearGradient3775" />
|
||||
<linearGradient
|
||||
id="linearGradient3775">
|
||||
<stop
|
||||
id="stop3777"
|
||||
offset="0"
|
||||
style="stop-color:#d3d7cf;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3779"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="0.32941176" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="9.7389301" inkscape:cx="0.68208017" inkscape:cy="29.558421" inkscape:current-layer="layer2" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:window-width="1920" inkscape:window-height="1137" inkscape:window-x="0" inkscape:window-y="27" inkscape:showpageshadow="false" inkscape:window-maximized="1">
|
||||
<inkscape:grid type="xygrid" id="grid3817" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata4">
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://agryson.net</dc:source>
|
||||
<cc:license rdf:resource="https://www.gnu.org/copyleft/lesser.html"/>
|
||||
<cc:license
|
||||
rdf:resource="https://www.gnu.org/copyleft/lesser.html" />
|
||||
<dc:title>preferences-techdraw</dc:title>
|
||||
<dc:date>2016-01-19</dc:date>
|
||||
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
@@ -152,7 +557,7 @@
|
||||
</dc:rights>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title/>
|
||||
<dc:title />
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
<cc:Agent>
|
||||
@@ -165,32 +570,104 @@
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</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: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 inkscape:label="Shadow" id="layer6" inkscape:groupmode="layer" transform="translate(0,16)"/>
|
||||
<g id="layer1" inkscape:label="Base" inkscape:groupmode="layer" style="display:inline" transform="translate(0,16)"/>
|
||||
<g inkscape:groupmode="layer" id="layer4" inkscape:label="new" style="display:inline" transform="translate(0,16)"/>
|
||||
<g inkscape:groupmode="layer" id="layer2" inkscape:label="Template" transform="translate(0,16)">
|
||||
<rect style="fill:#d3d7cf;fill-opacity:1;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="rect2987" width="45.999996" height="58.000004" x="-38.999996" y="3" transform="matrix(0,-1,1,0,0,0)"/>
|
||||
<rect style="fill:url(#linearGradient3781);fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="rect2987-1" width="41.999996" height="54.000004" x="-36.999996" y="5" transform="matrix(0,-1,1,0,0,0)"/>
|
||||
<rect style="color:#000000;fill:none;stroke:#555753;stroke-width:2;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;enable-background:accumulate" id="rect3894" width="50" height="38" x="7" y="-3"/>
|
||||
<rect style="color:#000000;fill:none;stroke:#555753;stroke-width:1.99999976;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;enable-background:accumulate" id="rect4664" width="23.999994" height="12.000004" x="33" y="23"/>
|
||||
<path style="fill:none;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 37,27 15.398794,0 0,0" id="path4666" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:none;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 37,31 15.642526,0 0,0" id="path4666-7" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 13,7 0,18" id="path3896" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 25,7 0,18" id="path3898" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 19,13 18,0" id="path3900" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 19,1 37,1" id="path3902" inkscape:connector-curvature="0"/>
|
||||
<path sodipodi:type="arc" style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" id="path3101" sodipodi:cx="19" sodipodi:cy="25" sodipodi:rx="6" sodipodi:ry="6" d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z" transform="translate(0,-18)"/>
|
||||
<path sodipodi:type="arc" style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" id="path3101-3" sodipodi:cx="19" sodipodi:cy="25" sodipodi:rx="6" sodipodi:ry="6" d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z" transform="translate(18,-18)"/>
|
||||
<path sodipodi:type="arc" style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" id="path3101-6" sodipodi:cx="19" sodipodi:cy="25" sodipodi:rx="6" sodipodi:ry="6" d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z"/>
|
||||
<g
|
||||
transform="translate(0,16)"
|
||||
id="layer6" />
|
||||
<g
|
||||
transform="translate(0,16)"
|
||||
style="display:inline"
|
||||
id="layer1" />
|
||||
<g
|
||||
transform="translate(0,16)"
|
||||
style="display:inline"
|
||||
id="layer4" />
|
||||
<g
|
||||
transform="translate(0,16)"
|
||||
id="layer2">
|
||||
<rect
|
||||
transform="matrix(0,-1,1,0,0,0)"
|
||||
y="3"
|
||||
x="-38.999996"
|
||||
height="58.000004"
|
||||
width="45.999996"
|
||||
id="rect2987"
|
||||
style="fill:#d3d7cf;fill-opacity:1;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<rect
|
||||
transform="matrix(0,-1,1,0,0,0)"
|
||||
y="5"
|
||||
x="-36.999996"
|
||||
height="54.000004"
|
||||
width="41.999996"
|
||||
id="rect2987-1"
|
||||
style="fill:url(#linearGradient3781);fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<rect
|
||||
y="-3"
|
||||
x="7"
|
||||
height="38"
|
||||
width="50"
|
||||
id="rect3894"
|
||||
style="color:#000000;fill:none;stroke:#555753;stroke-width:2;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;enable-background:accumulate" />
|
||||
<rect
|
||||
y="23"
|
||||
x="33"
|
||||
height="12.000004"
|
||||
width="23.999994"
|
||||
id="rect4664"
|
||||
style="color:#000000;fill:none;stroke:#555753;stroke-width:1.99999976;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;enable-background:accumulate" />
|
||||
<path
|
||||
id="path4666"
|
||||
d="m 37,27 15.398794,0 0,0"
|
||||
style="fill:none;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path4666-7"
|
||||
d="m 37,31 15.642526,0 0,0"
|
||||
style="fill:none;stroke:#555753;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path3896"
|
||||
d="m 13,7 0,18"
|
||||
style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path3898"
|
||||
d="m 25,7 0,18"
|
||||
style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path3900"
|
||||
d="m 19,13 18,0"
|
||||
style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path3902"
|
||||
d="M 19,1 37,1"
|
||||
style="fill:none;stroke:#888a85;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
transform="translate(0,-18)"
|
||||
d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z"
|
||||
id="path3101"
|
||||
style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" />
|
||||
<path
|
||||
transform="translate(18,-18)"
|
||||
d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z"
|
||||
id="path3101-3"
|
||||
style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" />
|
||||
<path
|
||||
d="m 25,25 c 0,3.313708 -2.686292,6 -6,6 -3.313708,0 -6,-2.686292 -6,-6 0,-3.313708 2.686292,-6 6,-6 3.313708,0 6,2.686292 6,6 z"
|
||||
id="path3101-6"
|
||||
style="fill:none;stroke:#2e3436;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.6" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |