Merge branch 'master' of ssh://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad into sanguinariojoe-ship
|
@ -77,10 +77,10 @@ SET(CMAKE_INSTALL_DOCDIR doc CACHE PATH "Output directory for documentation and
|
|||
SET(RESOURCEDIR "${CMAKE_INSTALL_DATADIR}")
|
||||
SET(DOCDIR "${CMAKE_INSTALL_DOCDIR}")
|
||||
|
||||
MESSAGE("prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||
MESSAGE("datadir: ${CMAKE_INSTALL_DATADIR}")
|
||||
MESSAGE("docdir: ${CMAKE_INSTALL_DOCDIR}")
|
||||
MESSAGE("includedir: ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
MESSAGE( STATUS "prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||
MESSAGE(STATUS "datadir: ${CMAKE_INSTALL_DATADIR}")
|
||||
MESSAGE(STATUS "docdir: ${CMAKE_INSTALL_DOCDIR}")
|
||||
MESSAGE(STATUS "includedir: ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
# ==============================================================================
|
||||
# == Win32 is default behaviour use the LibPack copied in Source tree ==========
|
||||
|
|
|
@ -278,28 +278,29 @@ set(ODE_FOUND TRUE)
|
|||
# OCC
|
||||
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
|
||||
set(OCC_LIBRARIES
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKBool
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKBool
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKFeat
|
||||
)
|
||||
set(OCC_LIBRARY_DIR
|
||||
${FREECAD_LIBPACK_DIR}/lib
|
||||
|
|
|
@ -284,28 +284,29 @@ set(OPENCV_FOUND TRUE)
|
|||
# OCC
|
||||
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
|
||||
set(OCC_LIBRARIES
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKBool
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKBool
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKFeat
|
||||
)
|
||||
set(OCC_LIBRARY_DIR
|
||||
${FREECAD_LIBPACK_DIR}/lib
|
||||
|
|
|
@ -284,16 +284,16 @@ set(OPENCV_FOUND TRUE)
|
|||
# OCC
|
||||
set(OCC_INCLUDE_DIR ${FREECAD_LIBPACK_DIR}/include/OpenCascade)
|
||||
set(OCC_LIBRARIES
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKFillet
|
||||
TKMesh
|
||||
TKernel
|
||||
TKG2d
|
||||
TKG3d
|
||||
TKMath
|
||||
TKIGES
|
||||
TKSTL
|
||||
TKShHealing
|
||||
TKXSBase
|
||||
TKBool
|
||||
TKXSBase
|
||||
TKXCAF
|
||||
|
@ -302,18 +302,19 @@ set(OCC_LIBRARIES
|
|||
TKSTEP
|
||||
TKIGES
|
||||
TKXDESTEP
|
||||
TKXDEIGES
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKXDEIGES
|
||||
TKBO
|
||||
TKBRep
|
||||
TKTopAlgo
|
||||
TKGeomAlgo
|
||||
TKGeomBase
|
||||
TKOffset
|
||||
TKPrim
|
||||
TKSTEP
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKHLR
|
||||
TKFeat
|
||||
)
|
||||
set(OCC_LIBRARY_DIR
|
||||
${FREECAD_LIBPACK_DIR}/lib
|
||||
|
|
|
@ -1339,7 +1339,7 @@ void Application::LoadParameters(void)
|
|||
// fix weird error while linking boost (all versions of VC)
|
||||
// VS2010: https://sourceforge.net/apps/phpbb/free-cad/viewtopic.php?f=4&t=1886&p=12553&hilit=boost%3A%3Afilesystem%3A%3Aget#p12553
|
||||
namespace boost { namespace program_options { std::string arg="arg"; } }
|
||||
#if (defined (BOOST_VERSION) && (BOOST_VERSION == 104100))
|
||||
#if (defined (BOOST_VERSION) && (BOOST_VERSION >= 104100))
|
||||
namespace boost { namespace program_options {
|
||||
const unsigned options_description::m_default_line_length = 80;
|
||||
} }
|
||||
|
|
|
@ -294,6 +294,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
|
|||
else {
|
||||
bool load_json=false;
|
||||
bool load_pickle=false;
|
||||
bool load_failed=false;
|
||||
std::string buffer = reader.getAttribute("value");
|
||||
if (reader.hasAttribute("encoded") &&
|
||||
strcmp(reader.getAttribute("encoded"),"yes") == 0) {
|
||||
|
@ -312,7 +313,16 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
|
|||
end = buffer.end();
|
||||
if (reader.hasAttribute("module") && reader.hasAttribute("class")) {
|
||||
Py::Module mod(PyImport_ImportModule(reader.getAttribute("module")),true);
|
||||
this->object = PyInstance_NewRaw(mod.getAttr(reader.getAttribute("class")).ptr(), 0);
|
||||
PyObject* cls = mod.getAttr(reader.getAttribute("class")).ptr();
|
||||
if (PyClass_Check(cls)) {
|
||||
this->object = PyInstance_NewRaw(cls, 0);
|
||||
}
|
||||
else if (PyType_Check(cls)) {
|
||||
this->object = PyType_GenericAlloc((PyTypeObject*)cls, 0);
|
||||
}
|
||||
else {
|
||||
throw Py::TypeError("neither class nor type object");
|
||||
}
|
||||
load_json = true;
|
||||
}
|
||||
else if (boost::regex_search(start, end, what, pickle)) {
|
||||
|
@ -327,6 +337,8 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
|
|||
catch (Py::Exception&) {
|
||||
Base::PyException e; // extract the Python error text
|
||||
Base::Console().Warning("PropertyPythonObject::Restore: %s\n", e.what());
|
||||
this->object = Py::None();
|
||||
load_failed = true;
|
||||
}
|
||||
|
||||
aboutToSetValue();
|
||||
|
@ -334,7 +346,7 @@ void PropertyPythonObject::Restore(Base::XMLReader &reader)
|
|||
this->fromString(buffer);
|
||||
else if (load_pickle)
|
||||
this->loadPickle(buffer);
|
||||
else
|
||||
else if (!load_failed)
|
||||
Base::Console().Warning("PropertyPythonObject::Restore: unsupported serialisation: %s\n", buffer.c_str());
|
||||
restoreObject(reader);
|
||||
hasSetValue();
|
||||
|
|
|
@ -152,6 +152,7 @@ SET(FreeCADBase_XML_SRCS
|
|||
SOURCE_GROUP("XML" FILES ${FreeCADBase_XML_SRCS})
|
||||
|
||||
set(FreeCADBase_MOC_HDRS
|
||||
Debugger.h
|
||||
FutureWatcherProgress.h
|
||||
)
|
||||
fc_wrap_cpp(FreeCADBase_MOC_SRCS ${FreeCADBase_MOC_HDRS})
|
||||
|
@ -182,6 +183,7 @@ SET(FreeCADBase_CPP_SRCS
|
|||
BoundBoxPyImp.cpp
|
||||
Builder3D.cpp
|
||||
Console.cpp
|
||||
Debugger.cpp
|
||||
Exception.cpp
|
||||
Factory.cpp
|
||||
FileInfo.cpp
|
||||
|
@ -234,6 +236,7 @@ SET(FreeCADBase_HPP_SRCS
|
|||
BoundBox.h
|
||||
Builder3D.h
|
||||
Console.h
|
||||
Debugger.h
|
||||
Exception.h
|
||||
Factory.h
|
||||
FileInfo.h
|
||||
|
|
80
src/Base/Debugger.cpp
Normal file
|
@ -0,0 +1,80 @@
|
|||
/***************************************************************************
|
||||
* Copyright (c) 2012 Werner Mayer <wmayer[at]users.sourceforge.net> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 51 Franklin Street, *
|
||||
* Fifth Floor, Boston, MA 02110-1301, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "PreCompiled.h"
|
||||
#ifndef _PreComp_
|
||||
# include <QCoreApplication>
|
||||
# include <QEvent>
|
||||
#endif
|
||||
|
||||
#include "Debugger.h"
|
||||
#include "Console.h"
|
||||
|
||||
using namespace Base;
|
||||
|
||||
Debugger::Debugger(QObject* parent)
|
||||
: QObject(parent), isAttached(false)
|
||||
{
|
||||
}
|
||||
|
||||
Debugger::~Debugger()
|
||||
{
|
||||
}
|
||||
|
||||
void Debugger::attach()
|
||||
{
|
||||
QCoreApplication::instance()->installEventFilter(this);
|
||||
isAttached = true;
|
||||
}
|
||||
|
||||
void Debugger::detach()
|
||||
{
|
||||
QCoreApplication::instance()->removeEventFilter(this);
|
||||
isAttached = false;
|
||||
}
|
||||
|
||||
bool Debugger::eventFilter(QObject*, QEvent* event)
|
||||
{
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
if (loop.isRunning()) {
|
||||
loop.quit();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int Debugger::exec()
|
||||
{
|
||||
if (isAttached)
|
||||
Base::Console().Message("TO CONTINUE PRESS ANY KEY...\n");
|
||||
return loop.exec();
|
||||
}
|
||||
|
||||
void Debugger::quit()
|
||||
{
|
||||
loop.quit();
|
||||
}
|
||||
|
||||
#include "moc_Debugger.cpp"
|
76
src/Base/Debugger.h
Normal file
|
@ -0,0 +1,76 @@
|
|||
/***************************************************************************
|
||||
* Copyright (c) 2012 Werner Mayer <wmayer[at]users.sourceforge.net> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 51 Franklin Street, *
|
||||
* Fifth Floor, Boston, MA 02110-1301, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef BASE_DEBUGGER_H
|
||||
#define BASE_DEBUGGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QEventLoop>
|
||||
|
||||
namespace Base {
|
||||
/**
|
||||
This is a utility class to break the application at a point to inspect e.g. the result of
|
||||
an algorithm.
|
||||
You usually use it like this
|
||||
\code
|
||||
...
|
||||
Base::Debugger dbg;
|
||||
dbg.attach();
|
||||
dbg.exec();
|
||||
...
|
||||
\endcode
|
||||
Or you can connect it with a button and let the user click it in order to continue.
|
||||
\code
|
||||
QPushButton* btn = new QPushButton();
|
||||
btn->setText("Continue");
|
||||
btn->show();
|
||||
Base::Debugger dbg;
|
||||
connect(btn, SIGNAL(clicked()), &dbg, SLOT(quit()));
|
||||
dbg.exec();
|
||||
\endcode
|
||||
\author Werner Mayer
|
||||
*/
|
||||
class BaseExport Debugger : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Debugger(QObject* parent=0);
|
||||
~Debugger();
|
||||
|
||||
void attach();
|
||||
void detach();
|
||||
bool eventFilter(QObject*, QEvent*);
|
||||
int exec();
|
||||
|
||||
public Q_SLOTS:
|
||||
void quit();
|
||||
|
||||
private:
|
||||
bool isAttached;
|
||||
QEventLoop loop;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // BASE_DEBUGGER_H
|
|
@ -587,6 +587,16 @@ void Matrix_invert (Matrix a, Matrix inva)
|
|||
Matrix_gauss(temp,inva);
|
||||
}
|
||||
|
||||
void Matrix4D::inverseOrthogonal(void)
|
||||
{
|
||||
Base::Vector3d c(dMtrx4D[0][3],dMtrx4D[1][3],dMtrx4D[2][3]);
|
||||
transpose();
|
||||
c = this->operator * (c);
|
||||
dMtrx4D[0][3] = -c.x; dMtrx4D[3][0] = 0;
|
||||
dMtrx4D[1][3] = -c.y; dMtrx4D[3][1] = 0;
|
||||
dMtrx4D[2][3] = -c.z; dMtrx4D[3][2] = 0;
|
||||
}
|
||||
|
||||
void Matrix4D::inverseGauss (void)
|
||||
{
|
||||
double matrix [16];
|
||||
|
|
|
@ -135,6 +135,8 @@ public:
|
|||
void transform (const Vector3f& rclVct, const Matrix4D& rclMtrx);
|
||||
void transform (const Vector3d& rclVct, const Matrix4D& rclMtrx);
|
||||
void inverse (void);
|
||||
/// if matrix is orthogonal a special way of getting the inverse is used
|
||||
void inverseOrthogonal(void);
|
||||
void inverseGauss (void);
|
||||
void transpose (void);
|
||||
//@}
|
||||
|
|
|
@ -1131,10 +1131,16 @@ int ParameterManager::LoadDocument(const char* sFileName)
|
|||
errorsOccured = true;
|
||||
}
|
||||
|
||||
if (errorsOccured)
|
||||
if (errorsOccured) {
|
||||
delete parser;
|
||||
delete errReporter;
|
||||
return 0;
|
||||
}
|
||||
|
||||
_pDocument = parser->adoptDocument();
|
||||
delete parser;
|
||||
delete errReporter;
|
||||
|
||||
_pDocument = parser->getDocument();
|
||||
if (!_pDocument)
|
||||
throw Exception("Malformed Parameter document: Invalid document");
|
||||
|
||||
|
|
|
@ -105,6 +105,8 @@
|
|||
// QtCore
|
||||
#include <QBuffer>
|
||||
#include <QByteArray>
|
||||
#include <QCoreApplication>
|
||||
#include <QEvent>
|
||||
#include <QIODevice>
|
||||
#include <QDataStream>
|
||||
#include <QWriteLocker>
|
||||
|
|
|
@ -193,17 +193,21 @@ void Gui::GUIApplicationNativeEventAware::Move3d(HANDLE device, std::vector<floa
|
|||
if (!currentWidget)
|
||||
currentWidget = mainWindow;
|
||||
|
||||
int x, y, z, rx, ry, rz;
|
||||
x = ceil(motionData[0])*(-1);
|
||||
y = ceil(motionData[1]);
|
||||
z = ceil(motionData[2]);
|
||||
rx = ceil(motionData[3])*(-1);
|
||||
ry = ceil(motionData[4]);
|
||||
rz = ceil(motionData[5]);
|
||||
|
||||
motionDataArray[0] = ceil(motionData[0]);
|
||||
motionDataArray[1] = ceil(motionData[1]);
|
||||
motionDataArray[2] = ceil(motionData[2]);
|
||||
motionDataArray[3] = ceil(motionData[3]);
|
||||
motionDataArray[4] = ceil(motionData[4]);
|
||||
motionDataArray[5] = ceil(motionData[5]);
|
||||
|
||||
if (!setOSIndependentMotionData()) return;
|
||||
importSettings();
|
||||
|
||||
Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent();
|
||||
motionEvent->setTranslations(x, y, z);
|
||||
motionEvent->setRotations(rx, ry, rz);
|
||||
|
||||
motionEvent->setTranslations(motionDataArray[0], motionDataArray[1], motionDataArray[2]);
|
||||
motionEvent->setRotations(motionDataArray[3], motionDataArray[4], motionDataArray[5]);
|
||||
|
||||
this->postEvent(currentWidget, motionEvent);
|
||||
}
|
||||
|
||||
|
|
|
@ -115,14 +115,14 @@
|
|||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="3" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="labelPlatform">
|
||||
<property name="text">
|
||||
<string>Platform</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="labelBuildPlatform">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html></string>
|
||||
|
@ -171,34 +171,48 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelBranch">
|
||||
<property name="text">
|
||||
<string notr="true">Branch</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<item row="6" column="1">
|
||||
<widget class="QLabel" name="labelBuildBranch">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="7" column="1">
|
||||
<widget class="QLabel" name="labelBuildHash">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="labelHash">
|
||||
<property name="text">
|
||||
<string notr="true">Hash</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="labelOS">
|
||||
<property name="text">
|
||||
<string>Operating system</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="labelBuildOS">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
@ -1457,9 +1457,10 @@ namespace Gui {
|
|||
*/
|
||||
class GUIApplication : public GUIApplicationNativeEventAware
|
||||
{
|
||||
int systemExit;
|
||||
public:
|
||||
GUIApplication(int & argc, char ** argv)
|
||||
: GUIApplicationNativeEventAware(argc, argv)
|
||||
GUIApplication(int & argc, char ** argv, int exitcode)
|
||||
: GUIApplicationNativeEventAware(argc, argv), systemExit(exitcode)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1480,6 +1481,10 @@ public:
|
|||
else
|
||||
return QApplication::notify(receiver, event);
|
||||
}
|
||||
catch (const Base::SystemExitException&) {
|
||||
qApp->exit(systemExit);
|
||||
return true;
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("Unhandled Base::Exception caught in GUIApplication::notify.\n"
|
||||
"The error message is: %s\n", e.what());
|
||||
|
@ -1543,7 +1548,8 @@ void Application::runApplication(void)
|
|||
Base::Console().Log("Init: Creating Gui::Application and QApplication\n");
|
||||
// if application not yet created by the splasher
|
||||
int argc = App::Application::GetARGC();
|
||||
GUIApplication mainApp(argc, App::Application::GetARGV());
|
||||
int systemExit = 1000;
|
||||
GUIApplication mainApp(argc, App::Application::GetARGV(), systemExit);
|
||||
// set application icon and window title
|
||||
const std::map<std::string,std::string>& cfg = App::Application::Config();
|
||||
std::map<std::string,std::string>::const_iterator it;
|
||||
|
@ -1716,9 +1722,15 @@ void Application::runApplication(void)
|
|||
Base::Console().Log("Init: Entering event loop\n");
|
||||
|
||||
try {
|
||||
mainApp.exec();
|
||||
int ret = mainApp.exec();
|
||||
if (ret == systemExit)
|
||||
throw Base::SystemExitException();
|
||||
}
|
||||
catch(...) {
|
||||
catch (const Base::SystemExitException&) {
|
||||
Base::Console().Message("System exit\n");
|
||||
throw;
|
||||
}
|
||||
catch (...) {
|
||||
// catching nasty stuff coming out of the event loop
|
||||
App::Application::destructObserver();
|
||||
Base::Console().Error("Event loop left through unhandled exception\n");
|
||||
|
|
|
@ -104,6 +104,7 @@ set(Gui_MOC_HDRS
|
|||
DlgCommandsImp.h
|
||||
DlgCustomizeImp.h
|
||||
DlgCustomizeSpaceball.h
|
||||
DlgCustomizeSpNavSettings.h
|
||||
DlgDisplayPropertiesImp.h
|
||||
DlgEditorImp.h
|
||||
DlgGeneralImp.h
|
||||
|
@ -190,6 +191,7 @@ SET(Gui_UIC_SRCS
|
|||
DlgAuthorization.ui
|
||||
DlgChooseIcon.ui
|
||||
DlgCommands.ui
|
||||
DlgCustomizeSpNavSettings.ui
|
||||
DlgDisplayProperties.ui
|
||||
DlgEditor.ui
|
||||
DlgGeneral.ui
|
||||
|
@ -338,6 +340,7 @@ SET(Dialog_Customize_CPP_SRCS
|
|||
DlgCommandsImp.cpp
|
||||
DlgCustomizeImp.cpp
|
||||
DlgCustomizeSpaceball.cpp
|
||||
DlgCustomizeSpNavSettings.cpp
|
||||
DlgKeyboardImp.cpp
|
||||
DlgToolbarsImp.cpp
|
||||
)
|
||||
|
@ -346,6 +349,7 @@ SET(Dialog_Customize_HPP_SRCS
|
|||
DlgCommandsImp.h
|
||||
DlgCustomizeImp.h
|
||||
DlgCustomizeSpaceball.h
|
||||
DlgCustomizeSpNavSettings.h
|
||||
DlgKeyboardImp.h
|
||||
DlgToolbarsImp.h
|
||||
)
|
||||
|
@ -355,6 +359,7 @@ SET(Dialog_Customize_SRCS
|
|||
DlgActions.ui
|
||||
DlgChooseIcon.ui
|
||||
DlgCommands.ui
|
||||
DlgCustomizeSpNavSettings.ui
|
||||
DlgKeyboard.ui
|
||||
DlgToolbars.ui
|
||||
)
|
||||
|
|
|
@ -281,6 +281,9 @@ void Command::invoke(int i)
|
|||
if (isActive())
|
||||
activated( i );
|
||||
}
|
||||
catch (const Base::SystemExitException&) {
|
||||
throw;
|
||||
}
|
||||
catch (Base::PyException &e) {
|
||||
e.ReportException();
|
||||
Base::Console().Error("Stack Trace: %s\n",e.getStackTrace().c_str());
|
||||
|
|
|
@ -576,7 +576,7 @@ void CreateStdCommands(void)
|
|||
rcCmdMgr.addCommand(new StdCmdOnlineHelpWebsite());
|
||||
rcCmdMgr.addCommand(new StdCmdFreeCADWebsite());
|
||||
rcCmdMgr.addCommand(new StdCmdPythonWebsite());
|
||||
rcCmdMgr.addCommand(new StdCmdMeasurementSimple());
|
||||
//rcCmdMgr.addCommand(new StdCmdMeasurementSimple());
|
||||
//rcCmdMgr.addCommand(new StdCmdDownloadOnlineHelp());
|
||||
//rcCmdMgr.addCommand(new StdCmdDescription());
|
||||
}
|
||||
|
|
312
src/Gui/DlgCustomizeSpNavSettings.cpp
Normal file
|
@ -0,0 +1,312 @@
|
|||
/***************************************************************************
|
||||
* Copyright (c) 2012 Petar Perisin <petar.perisin@gmail.com> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#include "DlgCustomizeSpNavSettings.h"
|
||||
#include "GuiApplicationNativeEventAware.h"
|
||||
#include "Application.h"
|
||||
|
||||
|
||||
using namespace Gui::Dialog;
|
||||
|
||||
DlgCustomizeSpNavSettings::DlgCustomizeSpNavSettings(QWidget *parent) :
|
||||
CustomizeActionPage(parent)
|
||||
{
|
||||
GUIApplicationNativeEventAware *app = qobject_cast<GUIApplicationNativeEventAware *>(QApplication::instance());
|
||||
|
||||
if (!app)
|
||||
return;
|
||||
if (!app->isSpaceballPresent())
|
||||
{
|
||||
this->setWindowTitle(tr("Spaceball Motion"));
|
||||
this->setMessage(tr("No Spaceball Present"));
|
||||
return;
|
||||
}
|
||||
this->setupUi(this);
|
||||
initialize();
|
||||
}
|
||||
|
||||
DlgCustomizeSpNavSettings::~DlgCustomizeSpNavSettings()
|
||||
{
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::setMessage(const QString& message)
|
||||
{
|
||||
QLabel *messageLabel = new QLabel(message,this);
|
||||
QVBoxLayout *layout = new QVBoxLayout();
|
||||
QHBoxLayout *layout2 = new QHBoxLayout();
|
||||
layout2->addStretch();
|
||||
layout2->addWidget(messageLabel);
|
||||
layout2->addStretch();
|
||||
layout->addItem(layout2);
|
||||
this->setLayout(layout);
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::changeEvent(QEvent *e)
|
||||
{
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
this->retranslateUi(this);
|
||||
}
|
||||
QWidget::changeEvent(e);
|
||||
}
|
||||
|
||||
ParameterGrp::handle DlgCustomizeSpNavSettings::spaceballMotionGroup() const
|
||||
{
|
||||
static ParameterGrp::handle group = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Spaceball")->GetGroup("Motion");
|
||||
return group;
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_ButtonCalibrate_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("Calibrate", true);
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::initialize()
|
||||
{
|
||||
CBDominant->setChecked(spaceballMotionGroup()->GetBool("Dominant", false));
|
||||
CBFlipYZ->setChecked(spaceballMotionGroup()->GetBool("FlipYZ", false));
|
||||
CBRotations->setChecked(spaceballMotionGroup()->GetBool("Rotations", true));
|
||||
CBTranslations->setChecked(spaceballMotionGroup()->GetBool("Translations", true));
|
||||
SliderGlobal->setValue(spaceballMotionGroup()->GetInt("GlobalSensitivity", 0));
|
||||
|
||||
CBEnablePanLR ->setChecked(spaceballMotionGroup()->GetBool("PanLREnable", true));
|
||||
CBReversePanLR->setChecked(spaceballMotionGroup()->GetBool("PanLRReverse", false));
|
||||
SliderPanLR ->setValue(spaceballMotionGroup()->GetInt("PanLRSensitivity", 0));
|
||||
|
||||
CBEnablePanUD ->setChecked(spaceballMotionGroup()->GetBool("PanUDEnable", true));
|
||||
CBReversePanUD->setChecked(spaceballMotionGroup()->GetBool("PanUDReverse", false));
|
||||
SliderPanUD ->setValue(spaceballMotionGroup()->GetInt("PanUDSensitivity", 0));
|
||||
|
||||
CBEnableZoom ->setChecked(spaceballMotionGroup()->GetBool("ZoomEnable", true));
|
||||
CBReverseZoom->setChecked(spaceballMotionGroup()->GetBool("ZoomReverse", false));
|
||||
SliderZoom ->setValue(spaceballMotionGroup()->GetInt("ZoomSensitivity", 0));
|
||||
|
||||
CBEnableTilt ->setChecked(spaceballMotionGroup()->GetBool("TiltEnable", true));
|
||||
CBReverseTilt->setChecked(spaceballMotionGroup()->GetBool("TiltReverse", false));
|
||||
SliderTilt ->setValue(spaceballMotionGroup()->GetInt("TiltSensitivity", 0));
|
||||
|
||||
CBEnableRoll ->setChecked(spaceballMotionGroup()->GetBool("RollEnable", true));
|
||||
CBReverseRoll->setChecked(spaceballMotionGroup()->GetBool("RollReverse", false));
|
||||
SliderRoll ->setValue(spaceballMotionGroup()->GetInt("RollSensitivity", 0));
|
||||
|
||||
CBEnableSpin ->setChecked(spaceballMotionGroup()->GetBool("SpinEnable", true));
|
||||
CBReverseSpin->setChecked(spaceballMotionGroup()->GetBool("SpinReverse", false));
|
||||
SliderSpin ->setValue(spaceballMotionGroup()->GetInt("SpinSensitivity", 0));
|
||||
|
||||
CBEnableTilt ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseTilt->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
|
||||
SliderTilt ->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
|
||||
CBEnableRoll ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseRoll->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
|
||||
SliderRoll ->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
|
||||
CBEnableSpin ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseSpin->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
|
||||
SliderSpin ->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
|
||||
|
||||
CBEnablePanLR ->setEnabled(CBTranslations->isChecked());
|
||||
CBReversePanLR->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
|
||||
SliderPanLR ->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
|
||||
CBEnablePanUD ->setEnabled(CBTranslations->isChecked());
|
||||
CBReversePanUD->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
|
||||
SliderPanUD ->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
|
||||
CBEnableZoom ->setEnabled(CBTranslations->isChecked());
|
||||
CBReverseZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
|
||||
SliderZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_ButtonDefaultSpNavMotions_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->Clear();
|
||||
initialize();
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBDominant_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("Dominant", CBDominant->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBFlipYZ_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("FlipYZ", CBFlipYZ->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBRotations_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("Rotations", CBRotations->isChecked());
|
||||
|
||||
CBEnableTilt ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseTilt->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
|
||||
SliderTilt ->setEnabled(CBRotations->isChecked() && CBEnableTilt->isChecked());
|
||||
CBEnableRoll ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseRoll->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
|
||||
SliderRoll ->setEnabled(CBRotations->isChecked() && CBEnableRoll->isChecked());
|
||||
CBEnableSpin ->setEnabled(CBRotations->isChecked());
|
||||
CBReverseSpin->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
|
||||
SliderSpin ->setEnabled(CBRotations->isChecked() && CBEnableSpin->isChecked());
|
||||
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBTranslations_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("Translations", CBTranslations->isChecked());
|
||||
|
||||
CBEnablePanLR ->setEnabled(CBTranslations->isChecked());
|
||||
CBReversePanLR->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
|
||||
SliderPanLR ->setEnabled(CBTranslations->isChecked() && CBEnablePanLR->isChecked());
|
||||
CBEnablePanUD ->setEnabled(CBTranslations->isChecked());
|
||||
CBReversePanUD->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
|
||||
SliderPanUD ->setEnabled(CBTranslations->isChecked() && CBEnablePanUD->isChecked());
|
||||
CBEnableZoom ->setEnabled(CBTranslations->isChecked());
|
||||
CBReverseZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
|
||||
SliderZoom ->setEnabled(CBTranslations->isChecked() && CBEnableZoom->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderGlobal_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("GlobalSensitivity", SliderGlobal->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnablePanLR_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("PanLREnable", CBEnablePanLR->isChecked());
|
||||
|
||||
CBReversePanLR->setEnabled(CBEnablePanLR->isChecked());
|
||||
SliderPanLR ->setEnabled(CBEnablePanLR->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReversePanLR_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("PanLRReverse", CBReversePanLR->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderPanLR_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("PanLRSensitivity", SliderPanLR->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnablePanUD_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("PanUDEnable", CBEnablePanUD->isChecked());
|
||||
|
||||
CBReversePanUD->setEnabled(CBEnablePanUD->isChecked());
|
||||
SliderPanUD ->setEnabled(CBEnablePanUD->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReversePanUD_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("PanUDReverse", CBReversePanUD->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderPanUD_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("PanUDSensitivity", SliderPanUD->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnableZoom_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("ZoomEnable", CBEnableZoom->isChecked());
|
||||
|
||||
CBReverseZoom ->setEnabled(CBEnableZoom->isChecked());
|
||||
SliderZoom ->setEnabled(CBEnableZoom->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReverseZoom_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("ZoomReverse", CBReverseZoom->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderZoom_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("ZoomSensitivity", SliderZoom->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnableTilt_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("TiltEnable", CBEnableTilt->isChecked());
|
||||
|
||||
CBReverseTilt->setEnabled(CBEnableTilt->isChecked());
|
||||
SliderTilt ->setEnabled(CBEnableTilt->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReverseTilt_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("TiltReverse", CBReverseTilt->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderTilt_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("TiltSensitivity", SliderTilt->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnableRoll_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("RollEnable", CBEnableRoll->isChecked());
|
||||
|
||||
CBReverseRoll->setEnabled(CBEnableRoll->isChecked());
|
||||
SliderRoll ->setEnabled(CBEnableRoll->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReverseRoll_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("RollReverse", CBReverseRoll->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderRoll_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("RollSensitivity", SliderRoll->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBEnableSpin_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("SpinEnable", CBEnableSpin->isChecked());
|
||||
|
||||
CBReverseSpin->setEnabled(CBEnableSpin->isChecked());
|
||||
SliderSpin ->setEnabled(CBEnableSpin->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_CBReverseSpin_clicked()
|
||||
{
|
||||
spaceballMotionGroup()->SetBool("SpinReverse", CBReverseSpin->isChecked());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::on_SliderSpin_sliderReleased()
|
||||
{
|
||||
spaceballMotionGroup()->SetInt("SpinSensitivity", SliderSpin->value());
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::onAddMacroAction(const QByteArray ¯oName)
|
||||
{
|
||||
//don't need to do anything here.
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::onRemoveMacroAction(const QByteArray ¯oName)
|
||||
{
|
||||
//don't need to do anything here.
|
||||
}
|
||||
|
||||
void DlgCustomizeSpNavSettings::onModifyMacroAction(const QByteArray ¯oName)
|
||||
{
|
||||
//don't need to do anything here.
|
||||
}
|
||||
|
||||
#include "moc_DlgCustomizeSpNavSettings.cpp"
|
85
src/Gui/DlgCustomizeSpNavSettings.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
/***************************************************************************
|
||||
* Copyright (c) 2012 Petar Perisin <petar.perisin@gmail.com> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef DLGCUSTOMIZESPNAVSETTINGS_H
|
||||
#define DLGCUSTOMIZESPNAVSETTINGS_H
|
||||
|
||||
#include "ui_DlgCustomizeSpNavSettings.h"
|
||||
#include "PropertyPage.h"
|
||||
#include <Base/Parameter.h>
|
||||
|
||||
namespace Gui
|
||||
{
|
||||
namespace Dialog
|
||||
{
|
||||
class DlgCustomizeSpNavSettings : public CustomizeActionPage, public Ui_DlgCustomizeSpNavSettings
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DlgCustomizeSpNavSettings(QWidget *parent = 0);
|
||||
~DlgCustomizeSpNavSettings();
|
||||
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onAddMacroAction(const QByteArray&);
|
||||
void onRemoveMacroAction(const QByteArray&);
|
||||
void onModifyMacroAction(const QByteArray&);
|
||||
void on_CBDominant_clicked();
|
||||
void on_CBFlipYZ_clicked();
|
||||
void on_CBRotations_clicked();
|
||||
void on_CBTranslations_clicked();
|
||||
void on_SliderGlobal_sliderReleased();
|
||||
void on_CBEnablePanLR_clicked();
|
||||
void on_CBReversePanLR_clicked();
|
||||
void on_SliderPanLR_sliderReleased();
|
||||
void on_CBEnablePanUD_clicked();
|
||||
void on_CBReversePanUD_clicked();
|
||||
void on_SliderPanUD_sliderReleased();
|
||||
void on_CBEnableZoom_clicked();
|
||||
void on_CBReverseZoom_clicked();
|
||||
void on_SliderZoom_sliderReleased();
|
||||
void on_CBEnableTilt_clicked();
|
||||
void on_CBReverseTilt_clicked();
|
||||
void on_SliderTilt_sliderReleased();
|
||||
void on_CBEnableRoll_clicked();
|
||||
void on_CBReverseRoll_clicked();
|
||||
void on_SliderRoll_sliderReleased();
|
||||
void on_CBEnableSpin_clicked();
|
||||
void on_CBReverseSpin_clicked();
|
||||
void on_SliderSpin_sliderReleased();
|
||||
void on_ButtonDefaultSpNavMotions_clicked();
|
||||
void on_ButtonCalibrate_clicked();
|
||||
|
||||
protected:
|
||||
void changeEvent(QEvent *e);
|
||||
|
||||
private:
|
||||
ParameterGrp::handle spaceballMotionGroup() const;
|
||||
void setMessage(const QString& message);
|
||||
void initialize();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif // DLGCUSTOMIZESPNAVSETTINGS_H
|
534
src/Gui/DlgCustomizeSpNavSettings.ui
Normal file
|
@ -0,0 +1,534 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DlgCustomizeSpNavSettings</class>
|
||||
<widget class="QWidget" name="DlgCustomizeSpNavSettings">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>439</width>
|
||||
<height>537</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Spaceball Motion</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelSlow">
|
||||
<property name="text">
|
||||
<string>Global Sensitivity: </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderGlobal">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBDominant">
|
||||
<property name="text">
|
||||
<string>Dominant Mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBFlipYZ">
|
||||
<property name="text">
|
||||
<string>Flip Y/Z</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBTranslations">
|
||||
<property name="text">
|
||||
<string>Enable Translations</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBRotations">
|
||||
<property name="text">
|
||||
<string>Enable Rotations</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<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="QPushButton" name="ButtonCalibrate">
|
||||
<property name="text">
|
||||
<string>Calibrate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="ButtonDefaultSpNavMotions">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>116</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="ImagePanLR">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-PanLR.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="ImagePanUD">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-PanUD.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="ImageZoom">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Zoom.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="imageTilt">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Tilt.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="ImageRoll">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Roll.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="ImageSpin">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="Icons/resource.qrc">:/icons/SpNav-Spin.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<property name="spacing">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnablePanLR">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReversePanLR">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnablePanUD">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReversePanUD">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnableZoom">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReverseZoom">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnableTilt">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReverseTilt">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnableRoll">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReverseRoll">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBEnableSpin">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CBReverseSpin">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="spacing">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderPanLR">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderPanUD">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderZoom">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderTilt">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderRoll">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="SliderSpin">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBelow</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources>
|
||||
<include location="Icons/resource.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -525,7 +525,7 @@ DlgCustomizeSpaceball::DlgCustomizeSpaceball(QWidget *parent)
|
|||
: CustomizeActionPage(parent), buttonView(0), buttonModel(0),
|
||||
commandView(0), commandModel(0), clearButton(0), printReference(0)
|
||||
{
|
||||
this->setWindowTitle(tr("Spaceball"));
|
||||
this->setWindowTitle(tr("Spaceball Buttons"));
|
||||
GUIApplicationNativeEventAware *app = qobject_cast<GUIApplicationNativeEventAware *>(QApplication::instance());
|
||||
if (!app)
|
||||
return;
|
||||
|
@ -555,7 +555,11 @@ void DlgCustomizeSpaceball::setMessage(const QString& message)
|
|||
{
|
||||
QLabel *messageLabel = new QLabel(message,this);
|
||||
QVBoxLayout *layout = new QVBoxLayout();
|
||||
layout->addWidget(messageLabel);
|
||||
QHBoxLayout *layout2 = new QHBoxLayout();
|
||||
layout2->addStretch();
|
||||
layout2->addWidget(messageLabel);
|
||||
layout2->addStretch();
|
||||
layout->addItem(layout2);
|
||||
this->setLayout(layout);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,10 +66,14 @@ void DlgSettingsViewColor::saveSettings()
|
|||
checkBoxSelection->onSave();
|
||||
HighlightColor->onSave();
|
||||
SelectionColor->onSave();
|
||||
CursorTextColor->onSave();
|
||||
EditedEdgeColor->onSave();
|
||||
EditedVertexColor->onSave();
|
||||
ConstructionColor->onSave();
|
||||
FullyConstrainedColor->onSave();
|
||||
DefaultShapeColor->onSave();
|
||||
DefaultShapeLineColor->onSave();
|
||||
DefaultShapeLineWidth->onSave();
|
||||
}
|
||||
|
||||
void DlgSettingsViewColor::loadSettings()
|
||||
|
@ -85,10 +89,14 @@ void DlgSettingsViewColor::loadSettings()
|
|||
checkBoxSelection->onRestore();
|
||||
HighlightColor->onRestore();
|
||||
SelectionColor->onRestore();
|
||||
CursorTextColor->onRestore();
|
||||
EditedEdgeColor->onRestore();
|
||||
EditedVertexColor->onRestore();
|
||||
ConstructionColor->onRestore();
|
||||
FullyConstrainedColor->onRestore();
|
||||
DefaultShapeColor->onRestore();
|
||||
DefaultShapeLineColor->onRestore();
|
||||
DefaultShapeLineWidth->onRestore();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>601</width>
|
||||
<height>407</height>
|
||||
<height>445</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -361,7 +361,20 @@
|
|||
<string>Default colors</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="colgridLayout">
|
||||
<item row="0" column="0">
|
||||
<item row="2" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<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 row="2" column="0">
|
||||
<layout class="QGridLayout" name="_2">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
|
@ -369,7 +382,7 @@
|
|||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
|
@ -382,28 +395,28 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Edited vertex color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Construction geometry</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Fully constrained geometry</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="ConstructionColor">
|
||||
<property name="toolTip">
|
||||
<string>The color of construction geometry in edit mode</string>
|
||||
|
@ -423,7 +436,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="FullyConstrainedColor">
|
||||
<property name="toolTip">
|
||||
<string>The color of fully constrained geometry in edit mode</string>
|
||||
|
@ -443,7 +456,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="EditedVertexColor">
|
||||
<property name="toolTip">
|
||||
<string>The color of vertices being edited</string>
|
||||
|
@ -463,7 +476,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="EditedEdgeColor">
|
||||
<property name="toolTip">
|
||||
<string>The color of edges being edited</string>
|
||||
|
@ -483,20 +496,124 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Cursor text color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="CursorTextColor">
|
||||
<property name="color">
|
||||
<color>
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>CursorTextColor</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>View</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="_1">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>240</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Default shape color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="Gui::PrefColorButton" name="DefaultShapeColor">
|
||||
<property name="toolTip">
|
||||
<string>The default color for new shapes</string>
|
||||
</property>
|
||||
<property name="color">
|
||||
<color>
|
||||
<red>204</red>
|
||||
<green>204</green>
|
||||
<blue>204</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>DefaultShapeColor</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>View</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>182</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Default line width and color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="Gui::PrefColorButton" name="DefaultShapeLineColor">
|
||||
<property name="toolTip">
|
||||
<string>The default line color for new shapes</string>
|
||||
</property>
|
||||
<property name="color">
|
||||
<color>
|
||||
<red>25</red>
|
||||
<green>25</green>
|
||||
<blue>25</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>DefaultShapeLineColor</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>View</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="Gui::PrefSpinBox" name="DefaultShapeLineWidth">
|
||||
<property name="toolTip">
|
||||
<string>The default line thickness for new shapes</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string>px</string>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>DefaultShapeLineWidth</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>View</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
@ -509,6 +626,11 @@
|
|||
<extends>QPushButton</extends>
|
||||
<header>Gui/Widgets.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>Gui::PrefSpinBox</class>
|
||||
<extends>QSpinBox</extends>
|
||||
<header>Gui/PrefWidgets.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>Gui::PrefColorButton</class>
|
||||
<extends>Gui::ColorButton</extends>
|
||||
|
@ -530,6 +652,11 @@
|
|||
<tabstop>checkBoxSelection</tabstop>
|
||||
<tabstop>HighlightColor</tabstop>
|
||||
<tabstop>SelectionColor</tabstop>
|
||||
<tabstop>CursorTextColor</tabstop>
|
||||
<tabstop>EditedEdgeColor</tabstop>
|
||||
<tabstop>EditedVertexColor</tabstop>
|
||||
<tabstop>ConstructionColor</tabstop>
|
||||
<tabstop>FullyConstrainedColor</tabstop>
|
||||
<tabstop>radioButtonSimple</tabstop>
|
||||
<tabstop>radioButtonGradient</tabstop>
|
||||
<tabstop>checkMidColor</tabstop>
|
||||
|
|
|
@ -187,6 +187,9 @@ bool Document::setEdit(Gui::ViewProvider* p, int ModNum)
|
|||
View3DInventor *activeView = dynamic_cast<View3DInventor *>(getActiveView());
|
||||
if (activeView && activeView->getViewer()->setEditingViewProvider(p,ModNum)) {
|
||||
d->_pcInEdit = p;
|
||||
Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog();
|
||||
if (dlg)
|
||||
dlg->setDocumentName(this->getDocument()->getName());
|
||||
if (d->_pcInEdit->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId()))
|
||||
signalInEdit(*(static_cast<ViewProviderDocumentObject*>(d->_pcInEdit)));
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <Base/Console.h>
|
||||
#include "GuiApplicationNativeEventAware.h"
|
||||
#include "SpaceballEvent.h"
|
||||
#include "Application.h"
|
||||
|
||||
//linux dependency libspnav-dev
|
||||
#ifdef Q_WS_X11
|
||||
|
@ -128,6 +129,184 @@ bool Gui::GUIApplicationNativeEventAware::processSpaceballEvent(QObject *object,
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
float Gui::GUIApplicationNativeEventAware::convertPrefToSensitivity(int value)
|
||||
{
|
||||
if (value < 0)
|
||||
{
|
||||
return ((0.9/50)*float(value) + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ((2.5/50)*float(value) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// This function modifies motionDataArray to be OS independent
|
||||
// on some OSes these axes are inverted, and some are switched - this method sets them up like this:
|
||||
|
||||
// motionDataArray[0] - pan Left - Right with mouse - pan Left(Left) - Right(Left) on screen
|
||||
// motionDataArray[1] - pan Front - Back with mouse - pan Up(Front) - Down(Back) on screen
|
||||
// motionDataArray[2] - pan Up - Down with mouse - zoom In(Up) - Out(Down) on screen
|
||||
// motionDataArray[3] - lean mouse Left-Right - rotate around Vertical axis on screen
|
||||
// motionDataArray[4] - lean mouse Front - Back - rotate around Horizointal axis on screen on screen
|
||||
// motionDataArray[5] - Spin mouse - rotate around "Zoom" axis on screen
|
||||
|
||||
|
||||
bool Gui::GUIApplicationNativeEventAware::setOSIndependentMotionData()
|
||||
{
|
||||
#ifdef SPNAV_FOUND
|
||||
int temp;
|
||||
motionDataArray[0] = -motionDataArray[0];
|
||||
motionDataArray[3] = -motionDataArray[3];
|
||||
|
||||
temp = motionDataArray[1];
|
||||
motionDataArray[1] = -motionDataArray[2];
|
||||
motionDataArray[2] = -temp;
|
||||
|
||||
temp = motionDataArray[4];
|
||||
motionDataArray[4] = -motionDataArray[5];
|
||||
motionDataArray[5] = -temp;
|
||||
#elif _USE_3DCONNEXION_SDK
|
||||
motionDataArray[0] = -motionDataArray[0];
|
||||
motionDataArray[3] = -motionDataArray[3];
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void Gui::GUIApplicationNativeEventAware::importSettings()
|
||||
{
|
||||
ParameterGrp::handle group = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Spaceball")->GetGroup("Motion");
|
||||
|
||||
// here I import settings from a dialog. For now they are set as is
|
||||
bool dominant = group->GetBool("Dominant"); // Is dominant checked
|
||||
bool flipXY = group->GetBool("FlipYZ");; // Is Flip X/Y checked
|
||||
float generalSensitivity = convertPrefToSensitivity(group->GetInt("GlobalSensitivity"));
|
||||
|
||||
// array that has stored info about "Enabled" checkboxes of all axes
|
||||
bool enabled[6];
|
||||
enabled[0] = group->GetBool("Translations", true) && group->GetBool("PanLREnable", true);
|
||||
enabled[1] = group->GetBool("Translations", true) && group->GetBool("PanUDEnable", true);
|
||||
enabled[2] = group->GetBool("Translations", true) && group->GetBool("ZoomEnable", true);
|
||||
enabled[3] = group->GetBool("Rotations", true) && group->GetBool("TiltEnable", true);
|
||||
enabled[4] = group->GetBool("Rotations", true) && group->GetBool("RollEnable", true);
|
||||
enabled[5] = group->GetBool("Rotations", true) && group->GetBool("SpinEnable", true);
|
||||
|
||||
// array that has stored info about "Reversed" checkboxes of all axes
|
||||
bool reversed[6];
|
||||
reversed[0] = group->GetBool("PanLRReverse");
|
||||
reversed[1] = group->GetBool("PanUDReverse");
|
||||
reversed[2] = group->GetBool("ZoomReverse");
|
||||
reversed[3] = group->GetBool("TiltReverse");
|
||||
reversed[4] = group->GetBool("RollReverse");
|
||||
reversed[5] = group->GetBool("SpinReverse");
|
||||
|
||||
// array that has stored info about sliders - on each slider you need to use method DlgSpaceballSettings::GetValuefromSlider
|
||||
// which will convert <-50, 50> linear integers from slider to <0.1, 10> exponential floating values
|
||||
float sensitivity[6];
|
||||
sensitivity[0] = convertPrefToSensitivity(group->GetInt("PanLRSensitivity"));
|
||||
sensitivity[1] = convertPrefToSensitivity(group->GetInt("PanUDSensitivity"));
|
||||
sensitivity[2] = convertPrefToSensitivity(group->GetInt("ZoomSensitivity"));
|
||||
sensitivity[3] = convertPrefToSensitivity(group->GetInt("TiltSensitivity"));
|
||||
sensitivity[4] = convertPrefToSensitivity(group->GetInt("RollSensitivity"));
|
||||
sensitivity[5] = convertPrefToSensitivity(group->GetInt("SpinSensitivity"));
|
||||
|
||||
if (group->GetBool("Calibrate"))
|
||||
{
|
||||
group->SetInt("CalibrationX",motionDataArray[0]);
|
||||
group->SetInt("CalibrationY",motionDataArray[1]);
|
||||
group->SetInt("CalibrationZ",motionDataArray[2]);
|
||||
group->SetInt("CalibrationXr",motionDataArray[3]);
|
||||
group->SetInt("CalibrationYr",motionDataArray[4]);
|
||||
group->SetInt("CalibrationZr",motionDataArray[5]);
|
||||
|
||||
group->RemoveBool("Calibrate");
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
motionDataArray[0] = motionDataArray[0] - group->GetInt("CalibrationX");
|
||||
motionDataArray[1] = motionDataArray[1] - group->GetInt("CalibrationY");
|
||||
motionDataArray[2] = motionDataArray[2] - group->GetInt("CalibrationZ");
|
||||
motionDataArray[3] = motionDataArray[3] - group->GetInt("CalibrationXr");
|
||||
motionDataArray[4] = motionDataArray[4] - group->GetInt("CalibrationYr");
|
||||
motionDataArray[5] = motionDataArray[5] - group->GetInt("CalibrationZr");
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
if (flipXY) {
|
||||
bool tempBool;
|
||||
float tempFloat;
|
||||
|
||||
tempBool = enabled[1];
|
||||
enabled[1] = enabled[2];
|
||||
enabled[2] = tempBool;
|
||||
|
||||
tempBool = enabled[4];
|
||||
enabled[4] = enabled[5];
|
||||
enabled[5] = tempBool;
|
||||
|
||||
|
||||
tempBool = reversed[1];
|
||||
reversed[1] = reversed[2];
|
||||
reversed[2] = tempBool;
|
||||
|
||||
tempBool = reversed[4];
|
||||
reversed[4] = reversed[5];
|
||||
reversed[5] = tempBool;
|
||||
|
||||
|
||||
tempFloat = sensitivity[1];
|
||||
sensitivity[1] = sensitivity[2];
|
||||
sensitivity[2] = tempFloat;
|
||||
|
||||
tempFloat = sensitivity[4];
|
||||
sensitivity[4] = sensitivity[5];
|
||||
sensitivity[5] = tempFloat;
|
||||
|
||||
|
||||
i = motionDataArray[1];
|
||||
motionDataArray[1] = motionDataArray[2];
|
||||
motionDataArray[2] = - i;
|
||||
|
||||
i = motionDataArray[4];
|
||||
motionDataArray[4] = motionDataArray[5];
|
||||
motionDataArray[5] = - i;
|
||||
}
|
||||
|
||||
if (dominant) { // if dominant is checked
|
||||
int max = 0;
|
||||
bool flag = false;
|
||||
for (i = 0; i < 6; ++i) {
|
||||
if (abs(motionDataArray[i]) > abs(max)) max = motionDataArray[i];
|
||||
}
|
||||
for (i = 0; i < 6; ++i) {
|
||||
if ((motionDataArray[i] != max) || (flag)) {
|
||||
motionDataArray[i] = 0;
|
||||
} else if (motionDataArray[i] == max) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; ++i) {
|
||||
if (motionDataArray[i] != 0) {
|
||||
if (enabled[i] == false)
|
||||
motionDataArray[i] = 0;
|
||||
else {
|
||||
if (reversed[i] == true)
|
||||
motionDataArray[i] = - motionDataArray[i];
|
||||
motionDataArray[i] = (int)((float)(motionDataArray[i]) * sensitivity[i] * generalSensitivity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
bool Gui::GUIApplicationNativeEventAware::x11EventFilter(XEvent *event)
|
||||
{
|
||||
|
@ -142,9 +321,21 @@ bool Gui::GUIApplicationNativeEventAware::x11EventFilter(XEvent *event)
|
|||
|
||||
if (navEvent.type == SPNAV_EVENT_MOTION)
|
||||
{
|
||||
motionDataArray[0] = navEvent.motion.x;
|
||||
motionDataArray[1] = navEvent.motion.y;
|
||||
motionDataArray[2] = navEvent.motion.z;
|
||||
motionDataArray[3] = navEvent.motion.rx;
|
||||
motionDataArray[4] = navEvent.motion.ry;
|
||||
motionDataArray[5] = navEvent.motion.rz;
|
||||
|
||||
if (!setOSIndependentMotionData()) return false;
|
||||
importSettings();
|
||||
|
||||
Spaceball::MotionEvent *motionEvent = new Spaceball::MotionEvent();
|
||||
motionEvent->setTranslations(navEvent.motion.x, navEvent.motion.y, navEvent.motion.z);
|
||||
motionEvent->setRotations(navEvent.motion.rx, navEvent.motion.ry, navEvent.motion.rz);
|
||||
|
||||
motionEvent->setTranslations(motionDataArray[0], motionDataArray[1], motionDataArray[2]);
|
||||
motionEvent->setRotations(motionDataArray[3], motionDataArray[4], motionDataArray[5]);
|
||||
|
||||
this->postEvent(currentWidget, motionEvent);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ class QMainWindow;
|
|||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
// #define _WIN32_WINNT 0x0501 //target at least windows XP
|
||||
//#define _WIN32_WINNT 0x0501 //target at least windows XP
|
||||
|
||||
#include <Windows.h>
|
||||
|
||||
|
@ -56,6 +56,10 @@ namespace Gui
|
|||
private:
|
||||
bool spaceballPresent;
|
||||
QMainWindow *mainWindow;
|
||||
int motionDataArray[6];
|
||||
bool setOSIndependentMotionData();
|
||||
void importSettings();
|
||||
float convertPrefToSensitivity(int value);
|
||||
|
||||
// For X11
|
||||
#ifdef Q_WS_X11
|
||||
|
|
BIN
src/Gui/Icons/SpNav-PanLR.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
src/Gui/Icons/SpNav-PanUD.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/Gui/Icons/SpNav-Roll.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/Gui/Icons/SpNav-Spin.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
src/Gui/Icons/SpNav-Tilt.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
src/Gui/Icons/SpNav-Zoom.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 145 KiB |
|
@ -78,5 +78,11 @@
|
|||
<file>Tree_Dimension.svg</file>
|
||||
<file>Tree_Python.svg</file>
|
||||
<file>spaceball_button.svg</file>
|
||||
<file>SpNav-PanLR.png</file>
|
||||
<file>SpNav-PanUD.png</file>
|
||||
<file>SpNav-Roll.png</file>
|
||||
<file>SpNav-Spin.png</file>
|
||||
<file>SpNav-Tilt.png</file>
|
||||
<file>SpNav-Zoom.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -63,6 +63,44 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::ActionSelector</name>
|
||||
<message>
|
||||
<source>Available:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Selected:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::AlignmentView</name>
|
||||
<message>
|
||||
<source>Movable object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fixed object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::BlenderNavigationStyle</name>
|
||||
<message>
|
||||
|
@ -160,6 +198,10 @@
|
|||
<source>License...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy to clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::ButtonModel</name>
|
||||
|
@ -708,10 +750,6 @@ Please define another shortcut.</source>
|
|||
<source>Viewing mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Plot mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -736,6 +774,10 @@ Please define another shortcut.</source>
|
|||
<source>Color plot:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Document window:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgEditorSettings</name>
|
||||
|
@ -1482,6 +1524,14 @@ Specify another directory, please.</source>
|
|||
<source>Invert zoom</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Zoom at cursor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Zoom step</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettings3DViewImp</name>
|
||||
|
@ -1722,6 +1772,10 @@ Specify another directory, please.</source>
|
|||
<source>Items</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current line highlight</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettingsImage</name>
|
||||
|
@ -1956,6 +2010,14 @@ Specify another directory, please.</source>
|
|||
<source>Macro path</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General macro settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Run macros in local environment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettingsUnits</name>
|
||||
|
@ -2046,14 +2108,6 @@ Specify another directory, please.</source>
|
|||
<source>Fully constrained geometry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of construction geometry in editmode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of fully constrained geometry in editmode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of vertices being edited</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -2062,6 +2116,42 @@ Specify another directory, please.</source>
|
|||
<source>The color of edges being edited</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of construction geometry in edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of fully constrained geometry in edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cursor text color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default shape color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default color for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default line width and color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default line color for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default line thickness for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>px</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgTipOfTheDay</name>
|
||||
|
@ -2124,7 +2214,39 @@ Specify another directory, please.</source>
|
|||
<context>
|
||||
<name>Gui::Dialog::DownloadDialog</name>
|
||||
<message>
|
||||
<source>Canceled.</source>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There already exists a file called %1 in the current directory. Overwrite?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to save the file %1: %2.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloading %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download canceled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download failed: %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloaded %1 to current directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -2162,6 +2284,13 @@ Specify another directory, please.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::LicenseDialog</name>
|
||||
<message>
|
||||
<source>Copyright</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::MouseButtons</name>
|
||||
<message>
|
||||
|
@ -2847,6 +2976,25 @@ Do you want to save your changes?</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::LocationWidget</name>
|
||||
<message>
|
||||
<source>X:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Y:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Z:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Direction:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::MacroCommand</name>
|
||||
<message>
|
||||
|
@ -2877,6 +3025,88 @@ Do you want to save your changes?</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::ManualAlignment</name>
|
||||
<message>
|
||||
<source>Manual alignment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment is already in progress.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Alignment[*]</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please, select at least one point in the left and the right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please, select at least %1 points in the left and the right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please pick points in the left and right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment has finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment has been canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Too few points picked in the left view. At least %1 points are needed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Too few points picked in the right view. At least %1 points are needed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different number of points picked in left and right view.
|
||||
On the left view %1 points are picked,
|
||||
on the right view %2 points are picked.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Try to align group of views</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment failed.
|
||||
How do you want to proceed?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Retry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ignore</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Abort</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different number of points picked in left and right view. On the left view %1 points are picked, on the right view %2 points are picked.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Point picked at (%1,%2,%3)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No point was picked</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::NetworkRetriever</name>
|
||||
<message>
|
||||
|
@ -3020,6 +3250,10 @@ Do you want to exit without saving your data?</source>
|
|||
<source>Select All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear console</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::PythonEditor</name>
|
||||
|
@ -3158,10 +3392,6 @@ Do you want to specify another directory?</source>
|
|||
</context>
|
||||
<context>
|
||||
<name>Gui::TaskView::TaskAppearance</name>
|
||||
<message>
|
||||
<source>Display mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Plot mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -3182,6 +3412,10 @@ Do you want to specify another directory?</source>
|
|||
<source>Appearance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Document window:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::TaskView::TaskEditControl</name>
|
||||
|
@ -3206,9 +3440,21 @@ Do you want to specify another directory?</source>
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Translator</name>
|
||||
<name>Gui::TouchpadNavigationStyle</name>
|
||||
<message>
|
||||
<source>English</source>
|
||||
<source>Press left mouse button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press SHIFT button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press ALT button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press PgUp/PgDown button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -3464,14 +3710,6 @@ Do you want to specify another directory?</source>
|
|||
<source>A general error occurred while loading the workbench</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot open file %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save views...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -3769,6 +4007,17 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdBoxSelection</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Box selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdAbout</name>
|
||||
<message>
|
||||
|
@ -3829,6 +4078,21 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdAlignment</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Alignment...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Align the selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdArrangeIcons</name>
|
||||
<message>
|
||||
|
@ -3945,21 +4209,6 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdDDuplicateSelection</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Duplicate selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Put duplicates of the selected objects to the active document</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdDelete</name>
|
||||
<message>
|
||||
|
@ -4106,6 +4355,40 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdDuplicateSelection</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Duplicate selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Put duplicates of the selected objects to the active document</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdEdit</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle &Edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggles the selected object's edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enters or leaves the selected object's edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdExport</name>
|
||||
<message>
|
||||
|
@ -4121,7 +4404,26 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Supported formats</source>
|
||||
<source>No selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please select first the objects you want to export.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdExportGraphviz</name>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dependency graph...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the dependency graph of the objects in the active document</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -4297,11 +4599,11 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mesure distance</source>
|
||||
<source>Measures distance between two selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Measures distance between two selected objects</source>
|
||||
<source>Measure distance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -4354,21 +4656,6 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdOnlineHelpPython</name>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Python Manuals</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the Python documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdOnlineHelpWebsite</name>
|
||||
<message>
|
||||
|
@ -5183,6 +5470,36 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewRotateLeft</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate the view by 90° counter-clockwise</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewRotateRight</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate the view by 90° clockwise</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewTop</name>
|
||||
<message>
|
||||
|
@ -5366,6 +5683,34 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Std_ExportGraphviz</name>
|
||||
<message>
|
||||
<source>Graphviz not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz couldn't be found on your system.
|
||||
Do you want to specify its installation path if it's already installed?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz installation path</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dependency graph</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz failed to create an image file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
|
|
|
@ -23,35 +23,35 @@
|
|||
<source>Angle Snap</source>
|
||||
<translation>Einrastwinkel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>1 °</source>
|
||||
<translation>1 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>2 °</source>
|
||||
<translation>2 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>5 °</source>
|
||||
<translation>5 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>10 °</source>
|
||||
<translation>10 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>20 °</source>
|
||||
<translation>20 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>45 °</source>
|
||||
<translation>45 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>90 °</source>
|
||||
<translation>90 °</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>180 °</source>
|
||||
<translation>180 °</translation>
|
||||
</message>
|
||||
|
@ -63,6 +63,44 @@
|
|||
<translation>kein</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::ActionSelector</name>
|
||||
<message>
|
||||
<source>Available:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Selected:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add</source>
|
||||
<translation type="unfinished">Hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove</source>
|
||||
<translation type="unfinished">Entfernen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move up</source>
|
||||
<translation type="unfinished">Noch oben verschieben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move down</source>
|
||||
<translation type="unfinished">Nache unten verschieben</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::AlignmentView</name>
|
||||
<message>
|
||||
<source>Movable object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fixed object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::BlenderNavigationStyle</name>
|
||||
<message>
|
||||
|
@ -160,6 +198,10 @@
|
|||
<source>License...</source>
|
||||
<translation>Lizenz...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy to clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::ButtonModel</name>
|
||||
|
@ -213,11 +255,11 @@
|
|||
<source>Angle</source>
|
||||
<translation>Winkel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>90°</source>
|
||||
<translation>90°</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>-90°</source>
|
||||
<translation>-90 °</translation>
|
||||
</message>
|
||||
|
@ -711,7 +753,7 @@ Wählen Sie bitte eine andere Tastenkombination.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>Display mode:</source>
|
||||
<translation>Anzeigemodus:</translation>
|
||||
<translation type="obsolete">Anzeigemodus:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Plot mode:</source>
|
||||
|
@ -737,6 +779,10 @@ Wählen Sie bitte eine andere Tastenkombination.</translation>
|
|||
<source>Color plot:</source>
|
||||
<translation>Farb-Plot:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Document window:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgEditorSettings</name>
|
||||
|
@ -1486,6 +1532,14 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<source>Invert zoom</source>
|
||||
<translation>Zoom umkehren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Zoom at cursor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Zoom step</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettings3DViewImp</name>
|
||||
|
@ -1727,6 +1781,10 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<source>Items</source>
|
||||
<translation>Elemente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current line highlight</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettingsImage</name>
|
||||
|
@ -1850,11 +1908,11 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<source>QSXGA 2560 x 2048</source>
|
||||
<translation>QSXGA 2560 x 2024</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>QUXGA 3200 × 2400</source>
|
||||
<translation>QUXGA 3200 x 2400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message utf8="true">
|
||||
<source>HUXGA 6400 × 4800</source>
|
||||
<translation>HUXGA 6400 x 4800</translation>
|
||||
</message>
|
||||
|
@ -1961,6 +2019,14 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<source>Macro path</source>
|
||||
<translation>Makro-Zielpfad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General macro settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Run macros in local environment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgSettingsUnits</name>
|
||||
|
@ -2053,11 +2119,11 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>The color of construction geometry in editmode</source>
|
||||
<translation>Die Farbe der Konstruktionsgeometrien im Editier-Modus</translation>
|
||||
<translation type="obsolete">Die Farbe der Konstruktionsgeometrien im Editier-Modus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of fully constrained geometry in editmode</source>
|
||||
<translation>Die Farbe der komplett festgelegten Geometrien im Editier-Modus</translation>
|
||||
<translation type="obsolete">Die Farbe der komplett festgelegten Geometrien im Editier-Modus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of vertices being edited</source>
|
||||
|
@ -2067,6 +2133,42 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<source>The color of edges being edited</source>
|
||||
<translation>Die Farbe der zu bearbeitenden Kanten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of construction geometry in edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The color of fully constrained geometry in edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cursor text color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default shape color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default color for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default line width and color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default line color for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default line thickness for new shapes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>px</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::DlgTipOfTheDay</name>
|
||||
|
@ -2131,7 +2233,43 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<name>Gui::Dialog::DownloadDialog</name>
|
||||
<message>
|
||||
<source>Canceled.</source>
|
||||
<translation>Abgebrochen.</translation>
|
||||
<translation type="obsolete">Abgebrochen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Abbrechen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Schließen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There already exists a file called %1 in the current directory. Overwrite?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to save the file %1: %2.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloading %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download canceled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download failed: %1.</source>
|
||||
<translation type="unfinished">Download fehlgeschlagen: %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloaded %1 to current directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -2168,6 +2306,13 @@ Wählen Sie bitte ein anderes Verzeichnis aus.</translation>
|
|||
<translation>OK</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::LicenseDialog</name>
|
||||
<message>
|
||||
<source>Copyright</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Dialog::MouseButtons</name>
|
||||
<message>
|
||||
|
@ -2856,6 +3001,25 @@ Sollen die Änderungen gespeichert werden?</translation>
|
|||
<translation>Benutzerdefiniert...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::LocationWidget</name>
|
||||
<message>
|
||||
<source>X:</source>
|
||||
<translation type="unfinished">X:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Y:</source>
|
||||
<translation type="unfinished">Y:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Z:</source>
|
||||
<translation type="unfinished">Z:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Direction:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::MacroCommand</name>
|
||||
<message>
|
||||
|
@ -2886,6 +3050,88 @@ Sollen die Änderungen gespeichert werden?</translation>
|
|||
<translation>Alles schließen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::ManualAlignment</name>
|
||||
<message>
|
||||
<source>Manual alignment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment is already in progress.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Alignment[*]</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please, select at least one point in the left and the right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please, select at least %1 points in the left and the right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please pick points in the left and right view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment has finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment has been canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Too few points picked in the left view. At least %1 points are needed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Too few points picked in the right view. At least %1 points are needed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different number of points picked in left and right view.
|
||||
On the left view %1 points are picked,
|
||||
on the right view %2 points are picked.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Try to align group of views</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The alignment failed.
|
||||
How do you want to proceed?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Retry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ignore</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Abort</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different number of points picked in left and right view. On the left view %1 points are picked, on the right view %2 points are picked.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Point picked at (%1,%2,%3)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No point was picked</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::NetworkRetriever</name>
|
||||
<message>
|
||||
|
@ -3031,6 +3277,10 @@ Wollen Sie sie beenden, ohne Ihre Daten zu speichern?</translation>
|
|||
<source>Select All</source>
|
||||
<translation>Alles auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear console</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::PythonEditor</name>
|
||||
|
@ -3175,7 +3425,7 @@ Möchten Sie ein anderes Verzeichnis angeben?</translation>
|
|||
<name>Gui::TaskView::TaskAppearance</name>
|
||||
<message>
|
||||
<source>Display mode:</source>
|
||||
<translation>Anzeigemodus:</translation>
|
||||
<translation type="obsolete">Anzeigemodus:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Plot mode:</source>
|
||||
|
@ -3197,6 +3447,10 @@ Möchten Sie ein anderes Verzeichnis angeben?</translation>
|
|||
<source>Appearance</source>
|
||||
<translation>Erscheinungsbild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Document window:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::TaskView::TaskEditControl</name>
|
||||
|
@ -3220,11 +3474,30 @@ Möchten Sie ein anderes Verzeichnis angeben?</translation>
|
|||
<translation>Selektion bearbeiten</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::TouchpadNavigationStyle</name>
|
||||
<message>
|
||||
<source>Press left mouse button</source>
|
||||
<translation type="unfinished">Drücken Sie die linke Maustaste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press SHIFT button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press ALT button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press PgUp/PgDown button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Gui::Translator</name>
|
||||
<message>
|
||||
<source>English</source>
|
||||
<translation>Englisch</translation>
|
||||
<translation type="obsolete">Englisch</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -3481,11 +3754,11 @@ Möchten Sie ein anderes Verzeichnis angeben?</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>File not found</source>
|
||||
<translation>Datei nicht gefunden</translation>
|
||||
<translation type="obsolete">Datei nicht gefunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot open file %1</source>
|
||||
<translation>Kann Datei %1 nicht öffnen</translation>
|
||||
<translation type="obsolete">Kann Datei %1 nicht öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save views...</source>
|
||||
|
@ -3792,6 +4065,17 @@ You either have to finish or cancel the editing in the task panel.</source>
|
|||
Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufgabenfensters abbrechen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdBoxSelection</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished">Standardansicht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Box selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdAbout</name>
|
||||
<message>
|
||||
|
@ -3852,6 +4136,21 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<translation>Vorheriges Fenster aktivieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdAlignment</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished">Bearbeiten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Alignment...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Align the selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdArrangeIcons</name>
|
||||
<message>
|
||||
|
@ -3972,15 +4271,15 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<name>StdCmdDDuplicateSelection</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation>Bearbeiten</translation>
|
||||
<translation type="obsolete">Bearbeiten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Duplicate selection</source>
|
||||
<translation>Auswahl duplizieren</translation>
|
||||
<translation type="obsolete">Auswahl duplizieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Put duplicates of the selected objects to the active document</source>
|
||||
<translation>Duplikate der selektierten Objekte in aktives Dokument einfügen</translation>
|
||||
<translation type="obsolete">Duplikate der selektierten Objekte in aktives Dokument einfügen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -4129,6 +4428,40 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<translation>Zeichenstil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdDuplicateSelection</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished">Bearbeiten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Duplicate selection</source>
|
||||
<translation type="unfinished">Auswahl duplizieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Put duplicates of the selected objects to the active document</source>
|
||||
<translation type="unfinished">Duplikate der selektierten Objekte in aktives Dokument einfügen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdEdit</name>
|
||||
<message>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished">Bearbeiten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle &Edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggles the selected object's edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enters or leaves the selected object's edit mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdExport</name>
|
||||
<message>
|
||||
|
@ -4145,7 +4478,30 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
</message>
|
||||
<message>
|
||||
<source>Supported formats</source>
|
||||
<translation>Unterstützte Formate</translation>
|
||||
<translation type="obsolete">Unterstützte Formate</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please select first the objects you want to export.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdExportGraphviz</name>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation type="unfinished">Werkzeuge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dependency graph...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the dependency graph of the objects in the active document</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -4321,12 +4677,16 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
</message>
|
||||
<message>
|
||||
<source>Mesure distance</source>
|
||||
<translation>Abstand messen</translation>
|
||||
<translation type="obsolete">Abstand messen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Measures distance between two selected objects</source>
|
||||
<translation>Misst die Distanz zwischen zwei ausgewählten Objekten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Measure distance</source>
|
||||
<translation type="unfinished">Abstand messen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdMergeProjects</name>
|
||||
|
@ -4381,15 +4741,15 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<name>StdCmdOnlineHelpPython</name>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
<translation>Hilfe</translation>
|
||||
<translation type="obsolete">Hilfe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Python Manuals</source>
|
||||
<translation>Python-Handbuch</translation>
|
||||
<translation type="obsolete">Python-Handbuch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the Python documentation</source>
|
||||
<translation>Python-Dokumentation anzeigen</translation>
|
||||
<translation type="obsolete">Python-Dokumentation anzeigen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -5206,6 +5566,36 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<translation>Rechtsansicht</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewRotateLeft</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished">Standardansicht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate the view by 90° counter-clockwise</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewRotateRight</name>
|
||||
<message>
|
||||
<source>Standard-View</source>
|
||||
<translation type="unfinished">Standardansicht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rotate the view by 90° clockwise</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdCmdViewTop</name>
|
||||
<message>
|
||||
|
@ -5389,6 +5779,34 @@ Sie müssen entweder den Bearbeitungsvorgang fertigstellen oder mittels des Aufg
|
|||
<translation>Drahtgitter-Modus</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Std_ExportGraphviz</name>
|
||||
<message>
|
||||
<source>Graphviz not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz couldn't be found on your system.
|
||||
Do you want to specify its installation path if it's already installed?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz installation path</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dependency graph</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphviz failed to create an image file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
|
|
|
@ -233,7 +233,7 @@ void MacroManager::run(MacroType eType,const char *sName)
|
|||
Base::Interpreter().runFile(sName, this->localEnv);
|
||||
}
|
||||
catch (const Base::SystemExitException&) {
|
||||
qApp->quit();
|
||||
throw;
|
||||
}
|
||||
catch (const Base::PyException& e) {
|
||||
Base::Console().Error("%s%s: %s\n",
|
||||
|
|
|
@ -1157,8 +1157,7 @@ void MainWindow::delayedStartup()
|
|||
App::Application::processCmdLineFiles();
|
||||
}
|
||||
catch (const Base::SystemExitException&) {
|
||||
QApplication::quit();
|
||||
return;
|
||||
throw;
|
||||
}
|
||||
|
||||
const std::map<std::string,std::string>& cfg = App::Application::Config();
|
||||
|
|
|
@ -345,11 +345,24 @@ int PolyPickerSelection::mouseButtonEvent( const SoMouseButtonEvent * const e, c
|
|||
m_iXnew = pos.x(); m_iYnew = pos.y();
|
||||
m_iXold = pos.x(); m_iYold = pos.y();
|
||||
}
|
||||
|
||||
} break;
|
||||
default:
|
||||
{
|
||||
} break;
|
||||
}
|
||||
}
|
||||
// release
|
||||
else {
|
||||
switch (button)
|
||||
{
|
||||
case SoMouseButtonEvent::BUTTON2:
|
||||
{
|
||||
QCursor cur = _pcView3D->getWidget()->cursor();
|
||||
_pcView3D->getWidget()->setCursor(m_cPrevCursor);
|
||||
// _pcView3D->getGLWidget()->releaseMouse();
|
||||
|
||||
// The pop-up menu should be shown when releasing mouse button because
|
||||
// otherwise the navigation style doesn't get the UP event and gets into
|
||||
// an inconsistent state.
|
||||
int id = popupMenu();
|
||||
if (id == Finish || id == Cancel) {
|
||||
releaseMouseModel();
|
||||
|
|
|
@ -442,13 +442,8 @@ void PythonConsole::OnChange( Base::Subject<const char*> &rCaller,const char* sR
|
|||
void PythonConsole::keyPressEvent(QKeyEvent * e)
|
||||
{
|
||||
bool restartHistory = true;
|
||||
QTextCursor cursor = this->textCursor();
|
||||
|
||||
// construct reference cursor at begin of input line ...
|
||||
QTextCursor inputLineBegin = cursor;
|
||||
inputLineBegin.movePosition( QTextCursor::End );
|
||||
inputLineBegin.movePosition( QTextCursor::StartOfLine );
|
||||
inputLineBegin.movePosition( QTextCursor::Right, QTextCursor::MoveAnchor, promptLength );
|
||||
QTextCursor cursor = this->textCursor();
|
||||
QTextCursor inputLineBegin = this->inputBegin();
|
||||
|
||||
if (cursor < inputLineBegin)
|
||||
{
|
||||
|
@ -579,6 +574,9 @@ void PythonConsole::keyPressEvent(QKeyEvent * e)
|
|||
// the event and afterwards update the list widget
|
||||
if (d->callTipsList->isVisible())
|
||||
{ d->callTipsList->validateCursor(); }
|
||||
|
||||
// disable history restart if input line changed
|
||||
restartHistory &= (inputLine != inputBlock.text().mid(promptLength));
|
||||
}
|
||||
// any cursor move resets the history to its latest item.
|
||||
if (restartHistory)
|
||||
|
@ -709,7 +707,7 @@ void PythonConsole::runSource(const QString& line)
|
|||
}
|
||||
if (ret == QMessageBox::Yes) {
|
||||
PyErr_Clear();
|
||||
qApp->quit();
|
||||
throw;
|
||||
}
|
||||
else {
|
||||
PyErr_Clear();
|
||||
|
@ -806,6 +804,21 @@ void PythonConsole::changeEvent(QEvent *e)
|
|||
TextEdit::changeEvent(e);
|
||||
}
|
||||
|
||||
void PythonConsole::mouseReleaseEvent( QMouseEvent *e )
|
||||
{
|
||||
TextEdit::mouseReleaseEvent( e );
|
||||
if (e->button() == Qt::LeftButton)
|
||||
{
|
||||
QTextCursor cursor = this->textCursor();
|
||||
if (cursor.hasSelection() == false
|
||||
&& cursor < this->inputBegin())
|
||||
{
|
||||
cursor.movePosition( QTextCursor::End );
|
||||
this->setTextCursor( cursor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Drops the event \a e and writes the right Python command.
|
||||
*/
|
||||
|
@ -904,6 +917,16 @@ void PythonConsole::insertFromMimeData (const QMimeData * source)
|
|||
}
|
||||
}
|
||||
|
||||
QTextCursor PythonConsole::inputBegin( void ) const
|
||||
{
|
||||
// construct cursor at begin of input line ...
|
||||
QTextCursor inputLineBegin( this->textCursor() );
|
||||
inputLineBegin.movePosition( QTextCursor::End );
|
||||
inputLineBegin.movePosition( QTextCursor::StartOfLine );
|
||||
inputLineBegin.movePosition( QTextCursor::Right, QTextCursor::MoveAnchor, promptLength );
|
||||
return inputLineBegin;
|
||||
}
|
||||
|
||||
QMimeData * PythonConsole::createMimeDataFromSelection () const
|
||||
{
|
||||
QMimeData* mime = new QMimeData();
|
||||
|
|
|
@ -126,6 +126,7 @@ protected:
|
|||
void dragEnterEvent ( QDragEnterEvent * e );
|
||||
void dragMoveEvent ( QDragMoveEvent * e );
|
||||
void changeEvent ( QEvent * e );
|
||||
void mouseReleaseEvent( QMouseEvent * e );
|
||||
|
||||
void overrideCursor(const QString& txt);
|
||||
|
||||
|
@ -134,6 +135,7 @@ protected:
|
|||
bool canInsertFromMimeData ( const QMimeData * source ) const;
|
||||
QMimeData * createMimeDataFromSelection () const;
|
||||
void insertFromMimeData ( const QMimeData * source );
|
||||
QTextCursor inputBegin( void ) const;
|
||||
|
||||
private:
|
||||
void runSource(const QString&);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include "PreCompiled.h"
|
||||
#include "SpaceballEvent.h"
|
||||
#include "Application.h"
|
||||
|
||||
using namespace Spaceball;
|
||||
|
||||
|
@ -40,12 +41,12 @@ MotionEvent::MotionEvent() : EventBase(static_cast<QEvent::Type>(MotionEventType
|
|||
|
||||
MotionEvent::MotionEvent(const MotionEvent& in) : EventBase(static_cast<QEvent::Type>(MotionEventType))
|
||||
{
|
||||
xTrans = in.xTrans;
|
||||
yTrans = in.yTrans;
|
||||
zTrans = in.zTrans;
|
||||
xRot = in.xRot;
|
||||
yRot = in.yRot;
|
||||
zRot = in.zRot;
|
||||
xTrans = in.xTrans;
|
||||
yTrans = in.yTrans;
|
||||
zTrans = in.zTrans;
|
||||
xRot = in.xRot;
|
||||
yRot = in.yRot;
|
||||
zRot = in.zRot;
|
||||
handled = in.handled;
|
||||
}
|
||||
|
||||
|
|
|
@ -235,7 +235,7 @@ AboutDialog::~AboutDialog()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
static QString getPlatform()
|
||||
static QString getOperatingSystem()
|
||||
{
|
||||
#if defined (Q_OS_WIN32)
|
||||
switch(QSysInfo::windowsVersion())
|
||||
|
@ -309,9 +309,13 @@ void AboutDialog::setupLabels()
|
|||
date.replace(QString::fromAscii("Unknown"), disda);
|
||||
ui->labelBuildDate->setText(date);
|
||||
|
||||
QString os = ui->labelBuildOS->text();
|
||||
os.replace(QString::fromAscii("Unknown"), getOperatingSystem());
|
||||
ui->labelBuildOS->setText(os);
|
||||
|
||||
QString platform = ui->labelBuildPlatform->text();
|
||||
platform.replace(QString::fromAscii("Unknown"),
|
||||
QString::fromAscii("%1 (%2-bit)").arg(getPlatform()).arg(QSysInfo::WordSize));
|
||||
QString::fromAscii("%1-bit").arg(QSysInfo::WordSize));
|
||||
ui->labelBuildPlatform->setText(platform);
|
||||
|
||||
// branch name
|
||||
|
@ -399,7 +403,8 @@ void AboutDialog::on_copyButton_clicked()
|
|||
QString major = QString::fromAscii(config["BuildVersionMajor"].c_str());
|
||||
QString minor = QString::fromAscii(config["BuildVersionMinor"].c_str());
|
||||
QString build = QString::fromAscii(config["BuildRevision"].c_str());
|
||||
str << "Platform: " << getPlatform() << " (" << QSysInfo::WordSize << "-bit)" << endl;
|
||||
str << "OS: " << getOperatingSystem() << endl;
|
||||
str << "Platform: " << QSysInfo::WordSize << "-bit" << endl;
|
||||
str << "Version: " << major << "." << minor << "." << build << endl;
|
||||
it = config.find("BuildRevisionBranch");
|
||||
if (it != config.end())
|
||||
|
|
|
@ -69,6 +69,8 @@ public:
|
|||
|
||||
const std::string& getDocumentName() const
|
||||
{ return documentName; }
|
||||
void setDocumentName(const std::string& doc)
|
||||
{ documentName = doc; }
|
||||
virtual bool isAllowedAlterDocument(void) const
|
||||
{ return false; }
|
||||
virtual bool isAllowedAlterView(void) const
|
||||
|
@ -94,6 +96,8 @@ protected:
|
|||
/// List of TaskBoxes of that dialog
|
||||
std::vector<QWidget*> Content;
|
||||
ButtonPosition pos;
|
||||
|
||||
private:
|
||||
std::string documentName;
|
||||
};
|
||||
|
||||
|
|
|
@ -142,29 +142,10 @@ void ViewProvider::setUpdatesEnabled (bool enable)
|
|||
void ViewProvider::eventCallback(void * ud, SoEventCallback * node)
|
||||
{
|
||||
const SoEvent * ev = node->getEvent();
|
||||
Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(node->getUserData());
|
||||
Gui::View3DInventorViewer* viewer = reinterpret_cast<Gui::View3DInventorViewer*>(node->getUserData());
|
||||
ViewProvider *self = reinterpret_cast<ViewProvider*>(ud);
|
||||
assert(self);
|
||||
|
||||
// Calculate 3d point to the mouse position
|
||||
SbVec3f point, norm;
|
||||
point = view->getPointOnScreen(ev->getPosition());
|
||||
norm = view->getViewDirection();
|
||||
|
||||
// for convenience make a pick ray action to get the (potentially) picked entity in the provider
|
||||
//SoPickedPoint* Point = self->getPointOnRay(point,norm,*view);
|
||||
SoSeparator* root = new SoSeparator;
|
||||
root->ref();
|
||||
root->addChild(view->getCamera());
|
||||
root->addChild(self->pcRoot);
|
||||
|
||||
SoRayPickAction rp(view->getViewportRegion());
|
||||
rp.setPoint(ev->getPosition());
|
||||
rp.apply(root);
|
||||
root->unref();
|
||||
|
||||
SoPickedPoint* pp = rp.getPickedPoint();
|
||||
|
||||
try {
|
||||
// Keyboard events
|
||||
if (ev->getTypeId().isDerivedFrom(SoKeyboardEvent::getClassTypeId())) {
|
||||
|
@ -192,12 +173,12 @@ void ViewProvider::eventCallback(void * ud, SoEventCallback * node)
|
|||
const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE;
|
||||
|
||||
// call the virtual method
|
||||
if (self->mouseButtonPressed(button,press,point,norm,pp))
|
||||
if (self->mouseButtonPressed(button,press,ev->getPosition(),viewer))
|
||||
node->setHandled();
|
||||
}
|
||||
// Mouse Movement handling
|
||||
else if (ev->getTypeId().isDerivedFrom(SoLocation2Event::getClassTypeId())) {
|
||||
if (self->mouseMove(point,norm,pp))
|
||||
if (self->mouseMove(ev->getPosition(),viewer))
|
||||
node->setHandled();
|
||||
}
|
||||
}
|
||||
|
@ -352,11 +333,28 @@ PyObject* ViewProvider::getPyObject()
|
|||
return pyViewObject;
|
||||
}
|
||||
|
||||
SoPickedPoint* ViewProvider::getPointOnRay(const SbVec3f& pos,const SbVec3f& dir, const View3DInventorViewer& viewer) const
|
||||
SoPickedPoint* ViewProvider::getPointOnRay(const SbVec2s& pos, const View3DInventorViewer* viewer) const
|
||||
{
|
||||
// for convenience make a pick ray action to get the (potentially) picked entity in the provider
|
||||
SoSeparator* root = new SoSeparator;
|
||||
root->ref();
|
||||
root->addChild(viewer->getCamera());
|
||||
root->addChild(pcRoot);
|
||||
|
||||
SoRayPickAction rp(viewer->getViewportRegion());
|
||||
rp.setPoint(pos);
|
||||
rp.apply(root);
|
||||
root->unref();
|
||||
|
||||
SoPickedPoint* pick = rp.getPickedPoint();
|
||||
return (pick ? new SoPickedPoint(*pick) : 0);
|
||||
}
|
||||
|
||||
SoPickedPoint* ViewProvider::getPointOnRay(const SbVec3f& pos,const SbVec3f& dir, const View3DInventorViewer* viewer) const
|
||||
{
|
||||
// Note: There seems to be a bug with setRay() which causes SoRayPickAction
|
||||
// to fail to get intersections between the ray and a line
|
||||
SoRayPickAction rp(viewer.getViewportRegion());
|
||||
SoRayPickAction rp(viewer->getViewportRegion());
|
||||
rp.setRay(pos,dir);
|
||||
rp.apply(pcRoot);
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <QIcon>
|
||||
#include <boost/signals.hpp>
|
||||
|
||||
class SbVec2s;
|
||||
class SbVec3f;
|
||||
class SoNode;
|
||||
class SoPath;
|
||||
|
@ -220,11 +221,12 @@ public:
|
|||
/// is called by the tree if the user double click on the object
|
||||
virtual bool doubleClicked(void) { return false; }
|
||||
/// is called when the provider is in edit and the mouse is moved
|
||||
virtual bool mouseMove(const SbVec3f &pos, const SbVec3f &norm, const SoPickedPoint* pp)
|
||||
virtual bool mouseMove(const SbVec2s &cursorPos,
|
||||
View3DInventorViewer* viewer)
|
||||
{ return false; }
|
||||
/// is called when the Provider is in edit and the mouse is clicked
|
||||
virtual bool mouseButtonPressed(int Button, bool pressed, const SbVec3f &pos,
|
||||
const SbVec3f &norm, const SoPickedPoint* pp)
|
||||
virtual bool mouseButtonPressed(int button, bool pressed, const SbVec2s &cursorPos,
|
||||
const View3DInventorViewer* viewer)
|
||||
{ return false; }
|
||||
/// set up the context-menu with the supported edit modes
|
||||
virtual void setupContextMenu(QMenu*, QObject*, const char*) {}
|
||||
|
@ -264,8 +266,11 @@ protected:
|
|||
void setDefaultMode(int);
|
||||
//@}
|
||||
/// Helper method to get picked entities while editing
|
||||
SoPickedPoint* getPointOnRay(const SbVec3f& pos,const SbVec3f& dir,
|
||||
const View3DInventorViewer& viewer) const;
|
||||
SoPickedPoint* getPointOnRay(const SbVec2s& pos,
|
||||
const View3DInventorViewer* viewer) const;
|
||||
/// Helper method to get picked entities while editing
|
||||
SoPickedPoint* getPointOnRay(const SbVec3f& pos, const SbVec3f& dir,
|
||||
const View3DInventorViewer* viewer) const;
|
||||
/// Reimplemented from subclass
|
||||
void onChanged(const App::Property* prop);
|
||||
|
||||
|
|
|
@ -63,14 +63,17 @@
|
|||
|
||||
using namespace Gui;
|
||||
|
||||
|
||||
PROPERTY_SOURCE(Gui::ViewProviderGeometryObject, Gui::ViewProviderDocumentObject)
|
||||
|
||||
const App::PropertyIntegerConstraint::Constraints intPercent = {0,100,1};
|
||||
|
||||
ViewProviderGeometryObject::ViewProviderGeometryObject() : pcBoundSwitch(0)
|
||||
{
|
||||
ADD_PROPERTY(ShapeColor,(0.8f,0.8f,0.8f));
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
|
||||
unsigned long shcol = hGrp->GetUnsigned("DefaultShapeColor",3435973887UL); // light gray (204,204,204)
|
||||
float r,g,b;
|
||||
r = ((shcol >> 24) & 0xff) / 255.0; g = ((shcol >> 16) & 0xff) / 255.0; b = ((shcol >> 8) & 0xff) / 255.0;
|
||||
ADD_PROPERTY(ShapeColor,(r, g, b));
|
||||
ADD_PROPERTY(Transparency,(0));
|
||||
Transparency.setConstraints(&intPercent);
|
||||
App::Material mat(App::Material::DEFAULT);
|
||||
|
@ -86,7 +89,8 @@ ViewProviderGeometryObject::ViewProviderGeometryObject() : pcBoundSwitch(0)
|
|||
|
||||
pcShapeMaterial = new SoMaterial;
|
||||
pcShapeMaterial->ref();
|
||||
ShapeMaterial.touch();
|
||||
//ShapeMaterial.touch(); materials are rarely used, so better to initialize with default shape color
|
||||
ShapeColor.touch();
|
||||
|
||||
pcBoundingBox = new Gui::SoFCBoundingBox;
|
||||
pcBoundingBox->ref();
|
||||
|
|
|
@ -498,6 +498,8 @@ const char* ViewProviderPythonFeatureImp::getDefaultDisplayMode() const
|
|||
Py::Callable method(vp.getAttr(std::string("getDefaultDisplayMode")));
|
||||
Py::Tuple args(0);
|
||||
Py::String str(method.apply(args));
|
||||
if (str.isUnicode())
|
||||
str = str.encode("ascii"); // json converts strings into unicode
|
||||
mode = str.as_std_string();
|
||||
return mode.c_str();
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "DlgCommandsImp.h"
|
||||
#include "DlgKeyboardImp.h"
|
||||
#include "DlgCustomizeSpaceball.h"
|
||||
#include "DlgCustomizeSpNavSettings.h"
|
||||
|
||||
using namespace Gui;
|
||||
using namespace Gui::Dialog;
|
||||
|
@ -75,6 +76,7 @@ WidgetFactorySupplier::WidgetFactorySupplier()
|
|||
new CustomPageProducer<DlgCustomToolbarsImp>;
|
||||
//new CustomPageProducer<DlgCustomToolBoxbarsImp>;
|
||||
new CustomPageProducer<DlgCustomActionsImp>;
|
||||
new CustomPageProducer<DlgCustomizeSpNavSettings>;
|
||||
new CustomPageProducer<DlgCustomizeSpaceball>;
|
||||
|
||||
// ADD YOUR PREFERENCE WIDGETS HERE
|
||||
|
|
|
@ -300,6 +300,9 @@ int main( int argc, char ** argv )
|
|||
else
|
||||
App::Application::runApplication();
|
||||
}
|
||||
catch (const Base::SystemExitException&) {
|
||||
exit(0);
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
Base::Console().Error("%s\n", e.what());
|
||||
}
|
||||
|
|
|
@ -101,6 +101,13 @@ class _Axis:
|
|||
if geoms:
|
||||
obj.Shape = Part.Compound(geoms)
|
||||
obj.Placement = pl
|
||||
|
||||
def __getstate__(self):
|
||||
return self.Type
|
||||
|
||||
def __setstate__(self,state):
|
||||
if state:
|
||||
self.Type = state
|
||||
|
||||
class _ViewProviderAxis:
|
||||
"A View Provider for the Axis object"
|
||||
|
@ -252,7 +259,6 @@ class _ViewProviderAxis:
|
|||
return None
|
||||
|
||||
|
||||
|
||||
class _AxisTaskPanel:
|
||||
'''The editmode TaskPanel for Axis objects'''
|
||||
def __init__(self):
|
||||
|
|
|
@ -43,6 +43,22 @@ def getStringList(objects):
|
|||
result += "]"
|
||||
return result
|
||||
|
||||
def getDefaultColor(objectType):
|
||||
'''getDefaultColor(string): returns a color value for the given object
|
||||
type (Wall, Structure, Window)'''
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
if objectType == "Wall":
|
||||
c = p.GetUnsigned("WallColor")
|
||||
elif objectType == "Structure":
|
||||
c = p.GetUnsigned("StructureColor")
|
||||
else:
|
||||
c = p.GetUnsigned("WindowsColor")
|
||||
r = float((c>>24)&0xFF)/255.0
|
||||
g = float((c>>16)&0xFF)/255.0
|
||||
b = float((c>>8)&0xFF)/255.0
|
||||
result = (r,g,b,1.0)
|
||||
return result
|
||||
|
||||
def addComponents(objectsList,host):
|
||||
'''addComponents(objectsList,hostObject): adds the given object or the objects
|
||||
from the given list as components to the given host Object. Use this for
|
||||
|
@ -83,6 +99,12 @@ def addComponents(objectsList,host):
|
|||
if hasattr(o,"Shape"):
|
||||
a.append(o)
|
||||
host.Objects = a
|
||||
elif host.isDerivedFrom("App::DocumentObjectGroup"):
|
||||
c = host.Group
|
||||
for o in objectsList:
|
||||
if not o in c:
|
||||
c.append(o)
|
||||
host.Group = c
|
||||
|
||||
def removeComponents(objectsList,host=None):
|
||||
'''removeComponents(objectsList,[hostObject]): removes the given component or
|
||||
|
@ -95,9 +117,7 @@ def removeComponents(objectsList,host=None):
|
|||
if Draft.getType(host) in ["Wall","Structure"]:
|
||||
if hasattr(host,"Axes"):
|
||||
a = host.Axes
|
||||
print a
|
||||
for o in objectsList[:]:
|
||||
print o.Name
|
||||
if o in a:
|
||||
a.remove(o)
|
||||
objectsList.remove(o)
|
||||
|
@ -111,10 +131,10 @@ def removeComponents(objectsList,host=None):
|
|||
if o.Base.Support:
|
||||
if isinstance(o.Base.Support,tuple):
|
||||
if o.Base.Support[0].Name == host.Name:
|
||||
print "removing sketch support to avoid cross-referencing"
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","removing sketch support to avoid cross-referencing")))
|
||||
o.Base.Support = None
|
||||
elif o.Base.Support.Name == host.Name:
|
||||
print "removing sketch support to avoid cross-referencing"
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","removing sketch support to avoid cross-referencing")))
|
||||
o.Base.Support = None
|
||||
host.Subtractions = s
|
||||
else:
|
||||
|
@ -262,41 +282,106 @@ def closeHole(shape):
|
|||
else:
|
||||
return solid
|
||||
|
||||
def getCutVolume(cutplane,shapes):
|
||||
"""getCutVolume(cutplane,shapes): returns a cut face and a cut volume
|
||||
from the given shapes and the given cutting plane"""
|
||||
import Part
|
||||
placement = FreeCAD.Placement(cutplane.Placement)
|
||||
# building boundbox
|
||||
bb = shapes[0].BoundBox
|
||||
for sh in shapes[1:]:
|
||||
bb.add(sh.BoundBox)
|
||||
bb.enlarge(1)
|
||||
um = vm = wm = 0
|
||||
ax = placement.Rotation.multVec(FreeCAD.Vector(0,0,1))
|
||||
u = placement.Rotation.multVec(FreeCAD.Vector(1,0,0))
|
||||
v = placement.Rotation.multVec(FreeCAD.Vector(0,1,0))
|
||||
if not bb.isCutPlane(placement.Base,ax):
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","No objects are cut by the plane")))
|
||||
return None,None,None
|
||||
else:
|
||||
corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)]
|
||||
for c in corners:
|
||||
dv = c.sub(placement.Base)
|
||||
um1 = DraftVecUtils.project(dv,u).Length
|
||||
um = max(um,um1)
|
||||
vm1 = DraftVecUtils.project(dv,v).Length
|
||||
vm = max(vm,vm1)
|
||||
wm1 = DraftVecUtils.project(dv,ax).Length
|
||||
wm = max(wm,wm1)
|
||||
p1 = FreeCAD.Vector(-um,vm,0)
|
||||
p2 = FreeCAD.Vector(um,vm,0)
|
||||
p3 = FreeCAD.Vector(um,-vm,0)
|
||||
p4 = FreeCAD.Vector(-um,-vm,0)
|
||||
cutface = Part.makePolygon([p1,p2,p3,p4,p1])
|
||||
cutface = Part.Face(cutface)
|
||||
cutface.Placement = placement
|
||||
cutnormal = DraftVecUtils.scaleTo(ax,wm)
|
||||
cutvolume = cutface.extrude(cutnormal)
|
||||
cutnormal = DraftVecUtils.neg(cutnormal)
|
||||
invcutvolume = cutface.extrude(cutnormal)
|
||||
return cutface,cutvolume,invcutvolume
|
||||
|
||||
def getShapeFromMesh(mesh):
|
||||
import Part, MeshPart
|
||||
if mesh.isSolid() and (mesh.countComponents() == 1):
|
||||
# use the best method
|
||||
faces = []
|
||||
for f in mesh.Facets:
|
||||
p=f.Points+[f.Points[0]]
|
||||
pts = []
|
||||
for pp in p:
|
||||
pts.append(FreeCAD.Vector(pp[0],pp[1],pp[2]))
|
||||
faces.append(Part.Face(Part.makePolygon(pts)))
|
||||
shell = Part.makeShell(faces)
|
||||
solid = Part.Solid(shell)
|
||||
solid = solid.removeSplitter()
|
||||
return solid
|
||||
|
||||
faces = []
|
||||
segments = mesh.getPlanarSegments(0.001) # use rather strict tolerance here
|
||||
for i in segments:
|
||||
if len(i) > 0:
|
||||
wires = MeshPart.wireFromSegment(mesh, i)
|
||||
if wires:
|
||||
faces.append(makeFace(wires))
|
||||
try:
|
||||
se = Part.makeShell(faces)
|
||||
except:
|
||||
return None
|
||||
else:
|
||||
try:
|
||||
solid = Part.Solid(se)
|
||||
except:
|
||||
return se
|
||||
else:
|
||||
return solid
|
||||
|
||||
|
||||
def meshToShape(obj,mark=True):
|
||||
'''meshToShape(object,[mark]): turns a mesh into a shape, joining coplanar facets. If
|
||||
mark is True (default), non-solid objects will be marked in red'''
|
||||
|
||||
name = obj.Name
|
||||
import Part, MeshPart, DraftGeomUtils
|
||||
if "Mesh" in obj.PropertiesList:
|
||||
faces = []
|
||||
mesh = obj.Mesh
|
||||
plac = obj.Placement
|
||||
segments = mesh.getPlanarSegments(0.001) # use rather strict tolerance here
|
||||
print len(segments)," segments ",segments
|
||||
for i in segments:
|
||||
print "treating",segments.index(i),i
|
||||
if len(i) > 0:
|
||||
wires = MeshPart.wireFromSegment(mesh, i)
|
||||
print "wire done"
|
||||
print wires
|
||||
if wires:
|
||||
faces.append(makeFace(wires))
|
||||
print "done facing"
|
||||
print "faces",faces
|
||||
|
||||
try:
|
||||
se = Part.makeShell(faces)
|
||||
solid = Part.Solid(se)
|
||||
except:
|
||||
raise
|
||||
else:
|
||||
if solid.isClosed():
|
||||
solid = getShapeFromMesh(mesh)
|
||||
if solid:
|
||||
if solid.isClosed() and solid.isValid():
|
||||
FreeCAD.ActiveDocument.removeObject(name)
|
||||
newobj = FreeCAD.ActiveDocument.addObject("Part::Feature",name)
|
||||
newobj.Shape = solid
|
||||
newobj.Placement = plac
|
||||
if not solid.isClosed():
|
||||
if (not solid.isClosed()) or (not solid.isValid()):
|
||||
if mark:
|
||||
newobj.ViewObject.ShapeColor = (1.0,0.0,0.0,1.0)
|
||||
return newobj
|
||||
|
@ -382,8 +467,8 @@ def download(url):
|
|||
else:
|
||||
return filepath
|
||||
|
||||
def check(objectslist,includehidden=True):
|
||||
"""check(objectslist,includehidden=True): checks if the given objects contain only solids"""
|
||||
def check(objectslist,includehidden=False):
|
||||
"""check(objectslist,includehidden=False): checks if the given objects contain only solids"""
|
||||
objs = Draft.getGroupContents(objectslist)
|
||||
if not includehidden:
|
||||
objs = Draft.removeHidden(objs)
|
||||
|
@ -393,20 +478,20 @@ def check(objectslist,includehidden=True):
|
|||
bad.append([o,"is not a Part-based object"])
|
||||
else:
|
||||
s = o.Shape
|
||||
if not s.isClosed():
|
||||
bad.append([o,"is not closed"])
|
||||
if (not s.isClosed()) and (not (Draft.getType(o) == "Axis")):
|
||||
bad.append([o,str(translate("Arch","is not closed"))])
|
||||
elif not s.isValid():
|
||||
bad.append([o,"is not valid"])
|
||||
elif not s.Solids:
|
||||
bad.append([o,"doesn't contain any solid"])
|
||||
bad.append([o,str(translate("Arch","is not valid"))])
|
||||
elif (not s.Solids) and (not (Draft.getType(o) == "Axis")):
|
||||
bad.append([o,str(translate("Arch","doesn't contain any solid"))])
|
||||
else:
|
||||
f = 0
|
||||
for sol in s.Solids:
|
||||
f += len(sol.Faces)
|
||||
if not sol.isClosed():
|
||||
bad.append([o,"contains a non-closed solid"])
|
||||
bad.append([o,str(translate("Arch","contains a non-closed solid"))])
|
||||
if len(s.Faces) != f:
|
||||
bad.append([o,"contains faces that are not part of any solid"])
|
||||
bad.append([o,str(translate("Arch","contains faces that are not part of any solid"))])
|
||||
return bad
|
||||
|
||||
|
||||
|
@ -508,7 +593,7 @@ class _CommandMeshToShape:
|
|||
def GetResources(self):
|
||||
return {'Pixmap' : 'Arch_MeshToShape',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_MeshToShape","Mesh to Shape"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_MeshToPart","Turns selected meshes into Part Shape objects")}
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_MeshToShape","Turns selected meshes into Part Shape objects")}
|
||||
|
||||
def IsActive(self):
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
|
@ -613,7 +698,7 @@ class _CommandCheck:
|
|||
def Activated(self):
|
||||
result = check(FreeCADGui.Selection.getSelection())
|
||||
if not result:
|
||||
FreeCAD.Console.PrintMessage("All good! no problems found")
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","All good! no problems found")))
|
||||
else:
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
for i in result:
|
||||
|
|
|
@ -27,6 +27,7 @@ __url__ = "http://free-cad.sourceforge.net"
|
|||
|
||||
import FreeCAD,FreeCADGui
|
||||
from PyQt4 import QtGui,QtCore
|
||||
from DraftTools import translate
|
||||
|
||||
def addToComponent(compobject,addobject,mod=None):
|
||||
'''addToComponent(compobject,addobject,mod): adds addobject
|
||||
|
@ -264,6 +265,13 @@ class Component:
|
|||
obj.Proxy = self
|
||||
self.Type = "Component"
|
||||
self.Subvolume = None
|
||||
|
||||
def __getstate__(self):
|
||||
return self.Type
|
||||
|
||||
def __setstate__(self,state):
|
||||
if state:
|
||||
self.Type = state
|
||||
|
||||
class ViewProviderComponent:
|
||||
"A default View Provider for Component objects"
|
||||
|
@ -317,7 +325,7 @@ class ArchSelectionObserver:
|
|||
def addSelection(self,document, object, element, position):
|
||||
if object == self.watched.Name:
|
||||
if not element:
|
||||
print "closing Sketch edit"
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","closing Sketch edit")))
|
||||
if self.hide:
|
||||
self.origin.ViewObject.Transparency = 0
|
||||
self.origin.ViewObject.Selectable = True
|
||||
|
|
|
@ -83,10 +83,11 @@ class _Floor:
|
|||
self.Object = obj
|
||||
|
||||
def __getstate__(self):
|
||||
return None
|
||||
return self.Type
|
||||
|
||||
def __setstate__(self,state):
|
||||
return None
|
||||
if state:
|
||||
self.Type = state
|
||||
|
||||
def execute(self,obj):
|
||||
pass
|
||||
|
|
|
@ -110,6 +110,13 @@ class _SectionPlane:
|
|||
def getNormal(self,obj):
|
||||
return obj.Shape.Faces[0].normalAt(0,0)
|
||||
|
||||
def __getstate__(self):
|
||||
return self.Type
|
||||
|
||||
def __setstate__(self,state):
|
||||
if state:
|
||||
self.Type = state
|
||||
|
||||
class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent):
|
||||
"A View Provider for Section Planes"
|
||||
def __init__(self,vobj):
|
||||
|
@ -180,16 +187,24 @@ class _ViewProviderSectionPlane(ArchComponent.ViewProviderComponent):
|
|||
vobj.Object.Proxy.execute(vobj.Object)
|
||||
return
|
||||
|
||||
def __getstate__(self):
|
||||
return None
|
||||
|
||||
def __setstate__(self,state):
|
||||
return None
|
||||
|
||||
class _ArchDrawingView:
|
||||
def __init__(self, obj):
|
||||
obj.addProperty("App::PropertyLink","Source","Base","The linked object")
|
||||
obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing View","The rendering mode to use")
|
||||
obj.addProperty("App::PropertyBool","ShowCut","Drawing View","If cut geometry is shown or not")
|
||||
obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The line width of the rendered objects")
|
||||
obj.RenderingMode = ["Solid","Wireframe"]
|
||||
obj.RenderingMode = "Solid"
|
||||
obj.RenderingMode = "Wireframe"
|
||||
obj.LineWidth = 0.35
|
||||
obj.ShowCut = False
|
||||
obj.Proxy = self
|
||||
self.Type = "DrawingView"
|
||||
self.Type = "ArchSectionView"
|
||||
|
||||
def execute(self, obj):
|
||||
if obj.Source:
|
||||
|
@ -197,59 +212,163 @@ class _ArchDrawingView:
|
|||
|
||||
def onChanged(self, obj, prop):
|
||||
if prop in ["Source","RenderingMode"]:
|
||||
self.buildSVG(obj)
|
||||
obj.ViewResult = self.updateSVG(obj)
|
||||
|
||||
def updateSVG(self, obj,join=False):
|
||||
"encapsulates a svg fragment into a transformation node"
|
||||
def __getstate__(self):
|
||||
return self.Type
|
||||
|
||||
def __setstate__(self,state):
|
||||
if state:
|
||||
self.Type = state
|
||||
|
||||
def getDisplayModes(self,vobj):
|
||||
modes=["Default"]
|
||||
return modes
|
||||
|
||||
def setDisplayMode(self,mode):
|
||||
return mode
|
||||
|
||||
def getFlatShape(self):
|
||||
"returns a flat shape representation of the view"
|
||||
if hasattr(self,"baseshape"):
|
||||
import Drawing
|
||||
[V0,V1,H0,H1] = Drawing.project(self.baseshape,self.direction)
|
||||
return V0.Edges+V1.Edges
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","No shape has been computed yet, select wireframe rendering and render again")))
|
||||
return None
|
||||
|
||||
def getDXF(self):
|
||||
"returns a flat shape representation of the view"
|
||||
if hasattr(self,"baseshape"):
|
||||
import Drawing
|
||||
[V0,V1,H0,H1] = Drawing.project(self.baseshape,self.direction)
|
||||
DxfOutput = Drawing.projectToDXF(self.baseshape,self.direction)
|
||||
return DxfOutput
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","No shape has been computed yet, select wireframe rendering and render again")))
|
||||
return None
|
||||
|
||||
def buildSVG(self, obj,join=False):
|
||||
"creates a svg representation"
|
||||
import Part, DraftGeomUtils
|
||||
if hasattr(obj,"Source"):
|
||||
if obj.Source:
|
||||
if obj.Source.Objects:
|
||||
objs = Draft.getGroupContents(obj.Source.Objects)
|
||||
objs = Draft.getGroupContents(obj.Source.Objects,walls=True)
|
||||
objs = Draft.removeHidden(objs)
|
||||
svg = ''
|
||||
self.svg = ''
|
||||
|
||||
# generating SVG
|
||||
linewidth = obj.LineWidth/obj.Scale
|
||||
if obj.RenderingMode == "Solid":
|
||||
# render using the Arch Vector Renderer
|
||||
import ArchVRM
|
||||
render = ArchVRM.Renderer()
|
||||
render.setWorkingPlane(obj.Source.Placement)
|
||||
render.addObjects(Draft.getGroupContents(objs,walls=True))
|
||||
render.cut(obj.Source.Shape)
|
||||
svg += render.getViewSVG(linewidth=linewidth)
|
||||
svg += render.getSectionSVG(linewidth=linewidth*2)
|
||||
render.addObjects(objs)
|
||||
if hasattr(obj,"ShowCut"):
|
||||
render.cut(obj.Source.Shape,obj.ShowCut)
|
||||
else:
|
||||
render.cut(obj.Source.Shape)
|
||||
self.svg += render.getViewSVG(linewidth="LWPlaceholder")
|
||||
self.svg += render.getSectionSVG(linewidth="SWPLaceholder")
|
||||
if hasattr(obj,"ShowCut"):
|
||||
if obj.ShowCut:
|
||||
self.svg += render.getHiddenSVG(linewidth="LWPlaceholder")
|
||||
# print render.info()
|
||||
|
||||
else:
|
||||
# render using the Drawing module
|
||||
import Drawing
|
||||
import Drawing, Part
|
||||
shapes = []
|
||||
hshapes = []
|
||||
sshapes = []
|
||||
p = FreeCAD.Placement(obj.Source.Placement)
|
||||
self.direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1))
|
||||
for o in objs:
|
||||
if o.isDerivedFrom("Part::Feature"):
|
||||
shapes.append(o.Shape)
|
||||
if o.Shape.isValid():
|
||||
shapes.extend(o.Shape.Solids)
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(str(translate("Arch","Skipping invalid object: "))+o.Name)
|
||||
cutface,cutvolume,invcutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes)
|
||||
if cutvolume:
|
||||
nsh = []
|
||||
for sh in shapes:
|
||||
for sol in sh.Solids:
|
||||
if sol.Volume < 0:
|
||||
sol.reverse()
|
||||
c = sol.cut(cutvolume)
|
||||
s = sol.section(cutface)
|
||||
nsh.extend(c.Solids)
|
||||
sshapes.append(s)
|
||||
if hasattr(obj,"ShowCut"):
|
||||
if obj.ShowCut:
|
||||
c = sol.cut(invcutvolume)
|
||||
hshapes.append(c)
|
||||
shapes = nsh
|
||||
if shapes:
|
||||
base = shapes.pop()
|
||||
for sh in shapes:
|
||||
base = base.fuse(sh)
|
||||
svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction))
|
||||
if svgf:
|
||||
svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"')
|
||||
svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px')
|
||||
svg += svgf
|
||||
self.shapes = shapes
|
||||
self.baseshape = Part.makeCompound(shapes)
|
||||
svgf = Drawing.projectToSVG(self.baseshape,self.direction)
|
||||
if svgf:
|
||||
svgf = svgf.replace('stroke-width="0.35"','stroke-width="LWPlaceholder"')
|
||||
svgf = svgf.replace('stroke-width="1"','stroke-width="LWPlaceholder"')
|
||||
svgf = svgf.replace('stroke-width:0.01','stroke-width:LWPlaceholder')
|
||||
self.svg += svgf
|
||||
if hshapes:
|
||||
hshapes = Part.makeCompound(hshapes)
|
||||
svgh = Drawing.projectToSVG(hshapes,self.direction)
|
||||
if svgh:
|
||||
svgh = svgh.replace('stroke-width="0.35"','stroke-width="LWPlaceholder"')
|
||||
svgh = svgh.replace('stroke-width="1"','stroke-width="LWPlaceholder"')
|
||||
svgh = svgh.replace('stroke-width:0.01','stroke-width:LWPlaceholder')
|
||||
svgh = svgh.replace('fill="none"','fill="none"\nstroke-dasharray="0.09,0.05"')
|
||||
self.svg += svgh
|
||||
if sshapes:
|
||||
edges = []
|
||||
for s in sshapes:
|
||||
edges.extend(s.Edges)
|
||||
wires = DraftGeomUtils.findWires(edges)
|
||||
faces = []
|
||||
for w in wires:
|
||||
if (w.ShapeType == "Wire") and w.isClosed():
|
||||
faces.append(Part.Face(w))
|
||||
sshapes = Part.makeCompound(faces)
|
||||
svgs = Drawing.projectToSVG(sshapes,self.direction)
|
||||
if svgs:
|
||||
svgs = svgs.replace('stroke-width="0.35"','stroke-width="SWPlaceholder"')
|
||||
svgs = svgs.replace('stroke-width="1"','stroke-width="SWPlaceholder"')
|
||||
svgs = svgs.replace('stroke-width:0.01','stroke-width:SWPlaceholder')
|
||||
self.svg += svgs
|
||||
|
||||
result = ''
|
||||
result += '<g id="' + obj.Name + '"'
|
||||
result += ' transform="'
|
||||
result += 'rotate('+str(obj.Rotation)+','+str(obj.X)+','+str(obj.Y)+') '
|
||||
result += 'translate('+str(obj.X)+','+str(obj.Y)+') '
|
||||
result += 'scale('+str(obj.Scale)+','+str(-obj.Scale)+')'
|
||||
result += '">\n'
|
||||
result += svg
|
||||
result += '</g>\n'
|
||||
# print "complete node:",result
|
||||
return result
|
||||
return ''
|
||||
def updateSVG(self, obj):
|
||||
"Formats and places the calculated svg stuff on the page"
|
||||
if not hasattr(self,"svg"):
|
||||
self.buildSVG(obj)
|
||||
else:
|
||||
if not self.svg:
|
||||
self.buildSVG(obj)
|
||||
if not hasattr(self,"svg"):
|
||||
return ''
|
||||
linewidth = obj.LineWidth/obj.Scale
|
||||
st = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetFloat("CutLineThickness")
|
||||
if not st:
|
||||
st = 2
|
||||
svg = self.svg.replace('LWPlaceholder', str(linewidth) + 'px')
|
||||
svg = svg.replace('SWPlaceholder', str(linewidth*st) + 'px')
|
||||
|
||||
result = ''
|
||||
result += '<g id="' + obj.Name + '"'
|
||||
result += ' transform="'
|
||||
result += 'rotate('+str(obj.Rotation)+','+str(obj.X)+','+str(obj.Y)+') '
|
||||
result += 'translate('+str(obj.X)+','+str(obj.Y)+') '
|
||||
result += 'scale('+str(obj.Scale)+','+str(-obj.Scale)+')'
|
||||
result += '">\n'
|
||||
result += svg
|
||||
result += '</g>\n'
|
||||
# print "complete node:",result
|
||||
return result
|
||||
|
||||
FreeCADGui.addCommand('Arch_SectionPlane',_CommandSectionPlane())
|
||||
|
|
|
@ -44,12 +44,7 @@ def makeStructure(baseobj=None,length=1,width=1,height=1,name=str(translate("Arc
|
|||
obj.Width = width
|
||||
obj.Height = height
|
||||
obj.Length = length
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
c = p.GetUnsigned("StructureColor")
|
||||
r = float((c>>24)&0xFF)/255.0
|
||||
g = float((c>>16)&0xFF)/255.0
|
||||
b = float((c>>8)&0xFF)/255.0
|
||||
obj.ViewObject.ShapeColor = (r,g,b,1.0)
|
||||
obj.ViewObject.ShapeColor = ArchCommands.getDefaultColor("Structure")
|
||||
return obj
|
||||
|
||||
def makeStructuralSystem(objects,axes):
|
||||
|
@ -171,7 +166,13 @@ class _Structure(ArchComponent.Component):
|
|||
elif (len(base.Wires) == 1):
|
||||
if base.Wires[0].isClosed():
|
||||
base = Part.Face(base.Wires[0])
|
||||
base = base.extrude(normal)
|
||||
base = base.extrude(normal)
|
||||
elif obj.Base.isDerivedFrom("Mesh::Feature"):
|
||||
if obj.Base.Mesh.isSolid():
|
||||
if obj.Base.Mesh.countComponents() == 1:
|
||||
sh = ArchCommands.getShapeFromMesh(obj.Base.Mesh)
|
||||
if sh.isClosed() and sh.isValid() and sh.Solids:
|
||||
base = sh
|
||||
else:
|
||||
if obj.Normal == Vector(0,0,0):
|
||||
normal = Vector(0,0,1)
|
||||
|
@ -222,8 +223,14 @@ class _Structure(ArchComponent.Component):
|
|||
else:
|
||||
if base:
|
||||
if not base.isNull():
|
||||
base = base.removeSplitter()
|
||||
obj.Shape = base
|
||||
if base.isValid() and base.Solids:
|
||||
if base.Volume < 0:
|
||||
base.reverse()
|
||||
if base.Volume < 0:
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Couldn't compute the wall shape")))
|
||||
return
|
||||
base = base.removeSplitter()
|
||||
obj.Shape = base
|
||||
if not DraftGeomUtils.isNull(pl):
|
||||
obj.Placement = pl
|
||||
|
||||
|
|
|
@ -25,12 +25,13 @@
|
|||
|
||||
import FreeCAD,math,Part,ArchCommands,DraftVecUtils,DraftGeomUtils
|
||||
|
||||
DEBUG = True # if we want debug messages
|
||||
MAXLOOP = 10 # the max number of loop before abort
|
||||
|
||||
# WARNING: in this module, faces are lists whose first item is the actual OCC face, the
|
||||
# other items being additional information such as color, etc.
|
||||
|
||||
DEBUG = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetBool("ShowVRMDebug")
|
||||
|
||||
class Renderer:
|
||||
"A renderer object"
|
||||
def __init__(self,wp=None):
|
||||
|
@ -73,6 +74,7 @@ class Renderer:
|
|||
self.iscut = False
|
||||
self.joined = False
|
||||
self.sections = []
|
||||
self.hiddenEdges = []
|
||||
|
||||
def setWorkingPlane(self,wp):
|
||||
"sets a Draft WorkingPlane or Placement for this renderer"
|
||||
|
@ -151,6 +153,8 @@ class Renderer:
|
|||
self.faces = [self.projectFace(f) for f in self.faces]
|
||||
if self.sections:
|
||||
self.sections = [self.projectFace(f) for f in self.sections]
|
||||
if self.hiddenEdges:
|
||||
self.hiddenEdges = [self.projectEdge(e) for e in self.hiddenEdges]
|
||||
self.oriented = True
|
||||
#print "VRM: end reorient"
|
||||
|
||||
|
@ -200,6 +204,14 @@ class Renderer:
|
|||
#print "VRM: projectFace end: ",len(sh.Vertexes)," verts"
|
||||
return [sh]+face[1:]
|
||||
|
||||
def projectEdge(self,edge):
|
||||
"projects a single edge on the WP"
|
||||
if len(edge.Vertexes) > 1:
|
||||
v1 = self.wp.getLocalCoords(edge.Vertexes[0].Point)
|
||||
v2 = self.wp.getLocalCoords(edge.Vertexes[-1].Point)
|
||||
return Part.Line(v1,v2).toShape()
|
||||
return edge
|
||||
|
||||
def flattenFace(self,face):
|
||||
"Returns a face where all vertices have Z = 0"
|
||||
wires = []
|
||||
|
@ -219,7 +231,7 @@ class Renderer:
|
|||
else:
|
||||
return [sh]+face[1:]
|
||||
|
||||
def cut(self,cutplane):
|
||||
def cut(self,cutplane,hidden=False):
|
||||
"Cuts through the shapes with a given cut plane and builds section faces"
|
||||
if DEBUG: print "\n\n======> Starting cut\n\n"
|
||||
if self.iscut:
|
||||
|
@ -228,42 +240,11 @@ class Renderer:
|
|||
if DEBUG: print "No objects to make sections"
|
||||
else:
|
||||
fill = (1.0,1.0,1.0,1.0)
|
||||
placement = FreeCAD.Placement(cutplane.Placement)
|
||||
|
||||
# building boundbox
|
||||
bb = self.shapes[0][0].BoundBox
|
||||
for sh in self.shapes[1:]:
|
||||
bb.add(sh[0].BoundBox)
|
||||
bb.enlarge(1)
|
||||
um = vm = wm = 0
|
||||
if not bb.isCutPlane(placement.Base,self.wp.axis):
|
||||
if DEBUG: print "No objects are cut by the plane"
|
||||
else:
|
||||
corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax),
|
||||
FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)]
|
||||
for c in corners:
|
||||
dv = c.sub(placement.Base)
|
||||
um1 = DraftVecUtils.project(dv,self.wp.u).Length
|
||||
um = max(um,um1)
|
||||
vm1 = DraftVecUtils.project(dv,self.wp.v).Length
|
||||
vm = max(vm,vm1)
|
||||
wm1 = DraftVecUtils.project(dv,self.wp.axis).Length
|
||||
wm = max(wm,wm1)
|
||||
p1 = FreeCAD.Vector(-um,vm,0)
|
||||
p2 = FreeCAD.Vector(um,vm,0)
|
||||
p3 = FreeCAD.Vector(um,-vm,0)
|
||||
p4 = FreeCAD.Vector(-um,-vm,0)
|
||||
cutface = Part.makePolygon([p1,p2,p3,p4,p1])
|
||||
cutface = Part.Face(cutface)
|
||||
cutface.Placement = placement
|
||||
cutnormal = DraftVecUtils.scaleTo(self.wp.axis,wm)
|
||||
cutvolume = cutface.extrude(cutnormal)
|
||||
shps = []
|
||||
for sh in self.shapes:
|
||||
shps.append(sh[0])
|
||||
cutface,cutvolume,invcutvolume = ArchCommands.getCutVolume(cutplane,shps)
|
||||
if cutface and cutvolume:
|
||||
shapes = []
|
||||
faces = []
|
||||
sections = []
|
||||
|
@ -277,6 +258,9 @@ class Renderer:
|
|||
if DraftGeomUtils.isCoplanar([f,cutface]):
|
||||
print "COPLANAR"
|
||||
sections.append([f,fill])
|
||||
if hidden:
|
||||
c = sol.cut(invcutvolume)
|
||||
self.hiddenEdges.extend(c.Edges)
|
||||
self.shapes = shapes
|
||||
self.faces = faces
|
||||
self.sections = sections
|
||||
|
@ -586,7 +570,8 @@ class Renderer:
|
|||
v = e.Vertexes[-1].Point
|
||||
svg += 'A '+ tostr(r) + ' '+ tostr(r) +' 0 0 1 '+ tostr(v.x) +' '
|
||||
svg += tostr(v.y) + ' '
|
||||
svg += 'Z '
|
||||
if len(edges) > 1:
|
||||
svg += 'Z '
|
||||
return svg
|
||||
|
||||
def getViewSVG(self,linewidth=0.01):
|
||||
|
@ -639,4 +624,25 @@ class Renderer:
|
|||
svg += 'fill-rule: evenodd'
|
||||
svg += '"/>\n'
|
||||
return svg
|
||||
|
||||
def getHiddenSVG(self,linewidth=0.02):
|
||||
"Returns a SVG fragment from cut geometry"
|
||||
if DEBUG: print "Printing ", len(self.sections), " hidden faces"
|
||||
if not self.oriented:
|
||||
self.reorient()
|
||||
svg = ''
|
||||
for e in self.hiddenEdges:
|
||||
svg +='<path '
|
||||
svg += 'd="'
|
||||
svg += self.getPathData(e)
|
||||
svg += '" '
|
||||
svg += 'stroke="#000000" '
|
||||
svg += 'stroke-width="' + str(linewidth) + '" '
|
||||
svg += 'style="stroke-width:' + str(linewidth) + ';'
|
||||
svg += 'stroke-miterlimit:1;'
|
||||
svg += 'stroke-linejoin:round;'
|
||||
svg += 'stroke-dasharray:0.09,0.05;'
|
||||
svg += 'fill:none;'
|
||||
svg += '"/>\n'
|
||||
return svg
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils
|
||||
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
|
||||
from FreeCAD import Vector
|
||||
from PyQt4 import QtCore
|
||||
from DraftTools import translate
|
||||
|
@ -37,17 +37,16 @@ def makeWall(baseobj=None,width=None,height=None,align="Center",name=str(transla
|
|||
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name)
|
||||
_Wall(obj)
|
||||
_ViewProviderWall(obj.ViewObject)
|
||||
if baseobj: obj.Base = baseobj
|
||||
if width: obj.Width = width
|
||||
if height: obj.Height = height
|
||||
if baseobj:
|
||||
obj.Base = baseobj
|
||||
if width:
|
||||
obj.Width = width
|
||||
if height:
|
||||
obj.Height = height
|
||||
obj.Align = align
|
||||
if obj.Base: obj.Base.ViewObject.hide()
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
c = p.GetUnsigned("WallColor")
|
||||
r = float((c>>24)&0xFF)/255.0
|
||||
g = float((c>>16)&0xFF)/255.0
|
||||
b = float((c>>8)&0xFF)/255.0
|
||||
obj.ViewObject.ShapeColor = (r,g,b,1.0)
|
||||
if obj.Base:
|
||||
obj.Base.ViewObject.hide()
|
||||
obj.ViewObject.ShapeColor = ArchCommands.getDefaultColor("Wall")
|
||||
return obj
|
||||
|
||||
def joinWalls(walls):
|
||||
|
@ -358,31 +357,44 @@ class _Wall(ArchComponent.Component):
|
|||
base = None
|
||||
if obj.Base.isDerivedFrom("Part::Feature"):
|
||||
if not obj.Base.Shape.isNull():
|
||||
base = obj.Base.Shape.copy()
|
||||
if base.Solids:
|
||||
pass
|
||||
elif base.Faces and (not obj.ForceWire):
|
||||
if height:
|
||||
norm = normal.multiply(height)
|
||||
base = base.extrude(norm)
|
||||
elif base.Wires:
|
||||
temp = None
|
||||
for wire in obj.Base.Shape.Wires:
|
||||
if obj.Base.Shape.isValid():
|
||||
base = obj.Base.Shape.copy()
|
||||
if base.Solids:
|
||||
pass
|
||||
elif base.Faces and (not obj.ForceWire):
|
||||
if height:
|
||||
norm = normal.multiply(height)
|
||||
base = base.extrude(norm)
|
||||
elif base.Wires:
|
||||
temp = None
|
||||
for wire in obj.Base.Shape.Wires:
|
||||
sh = getbase(wire)
|
||||
if temp:
|
||||
temp = temp.fuse(sh)
|
||||
else:
|
||||
temp = sh
|
||||
base = temp
|
||||
elif base.Edges:
|
||||
wire = Part.Wire(base.Edges)
|
||||
sh = getbase(wire)
|
||||
if temp:
|
||||
temp = temp.fuse(sh)
|
||||
else:
|
||||
temp = sh
|
||||
base = temp
|
||||
elif base.Edges:
|
||||
wire = Part.Wire(base.Edges)
|
||||
sh = getbase(wire)
|
||||
if sh:
|
||||
if sh:
|
||||
base = sh
|
||||
else:
|
||||
base = None
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Error: Invalid base object")))
|
||||
|
||||
elif obj.Base.isDerivedFrom("Mesh::Feature"):
|
||||
if obj.Base.Mesh.isSolid():
|
||||
if obj.Base.Mesh.countComponents() == 1:
|
||||
sh = ArchCommands.getShapeFromMesh(obj.Base.Mesh)
|
||||
if sh.isClosed() and sh.isValid() and sh.Solids and (not sh.isNull()):
|
||||
base = sh
|
||||
else:
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Error: Invalid base object")))
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(str(translate("Arch","This mesh is an invalid solid")))
|
||||
obj.Base.ViewObject.show()
|
||||
|
||||
if base:
|
||||
|
||||
for app in obj.Additions:
|
||||
if Draft.getType(app) == "Window":
|
||||
# window
|
||||
|
@ -419,13 +431,19 @@ class _Wall(ArchComponent.Component):
|
|||
hole.ViewObject.hide() # to be removed
|
||||
|
||||
if not base.isNull():
|
||||
try:
|
||||
base = base.removeSplitter()
|
||||
except:
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Error removing splitter from wall shape")))
|
||||
obj.Shape = base
|
||||
if not DraftGeomUtils.isNull(pl):
|
||||
obj.Placement = pl
|
||||
if base.isValid() and base.Solids:
|
||||
if base.Volume < 0:
|
||||
base.reverse()
|
||||
if base.Volume < 0:
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Couldn't compute the wall shape")))
|
||||
return
|
||||
try:
|
||||
base = base.removeSplitter()
|
||||
except:
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Error removing splitter from wall shape")))
|
||||
obj.Shape = base
|
||||
if not DraftGeomUtils.isNull(pl):
|
||||
obj.Placement = pl
|
||||
|
||||
class _ViewProviderWall(ArchComponent.ViewProviderComponent):
|
||||
"A View Provider for the Wall object"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils
|
||||
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
|
||||
from FreeCAD import Vector
|
||||
from PyQt4 import QtCore,QtGui
|
||||
from DraftTools import translate
|
||||
|
@ -49,12 +49,7 @@ def makeWindow(baseobj=None,width=None,name=str(translate("Arch","Window"))):
|
|||
if obj.Base:
|
||||
obj.Base.ViewObject.DisplayMode = "Wireframe"
|
||||
obj.Base.ViewObject.hide()
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
c = p.GetUnsigned("WindowColor")
|
||||
r = float((c>>24)&0xFF)/255.0
|
||||
g = float((c>>16)&0xFF)/255.0
|
||||
b = float((c>>8)&0xFF)/255.0
|
||||
obj.ViewObject.ShapeColor = (r,g,b,1.0)
|
||||
obj.ViewObject.ShapeColor = ArchCommands.getDefaultColor("Window")
|
||||
return obj
|
||||
|
||||
def makeDefaultWindowPart(obj):
|
||||
|
@ -166,7 +161,6 @@ class _Window(ArchComponent.Component):
|
|||
if zof:
|
||||
zov = DraftVecUtils.scaleTo(norm,zof)
|
||||
shape.translate(zov)
|
||||
print shape
|
||||
shapes.append(shape)
|
||||
if shapes:
|
||||
obj.Shape = Part.makeCompound(shapes)
|
||||
|
@ -445,10 +439,7 @@ class _ArchWindowTaskPanel:
|
|||
self.obj.WindowParts = parts
|
||||
self.update()
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(str(
|
||||
QtGui.QApplication.translate(
|
||||
"Arch", "Unable to create component",
|
||||
None, QtGui.QApplication.UnicodeUTF8)))
|
||||
FreeCAD.Console.PrintWarning(str(translate("Arch", "Unable to create component")))
|
||||
|
||||
self.newtitle.setVisible(False)
|
||||
self.new1.setVisible(False)
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
# Resource object code
|
||||
#
|
||||
# Created: Sun Jul 22 16:38:54 2012
|
||||
# by: The Resource Compiler for PyQt (Qt v4.8.1)
|
||||
# Created: Sun Aug 5 16:52:51 2012
|
||||
# by: The Resource Compiler for PyQt (Qt v4.8.2)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
@ -6042,85 +6042,100 @@ qt_resource_data = "\
|
|||
\x00\x00\x00\x12\x00\x57\x00\x65\x00\x72\x00\x6b\x00\x7a\x00\x65\
|
||||
\x00\x75\x00\x67\x00\x65\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\
|
||||
\x54\x6f\x6f\x6c\x73\x07\x00\x00\x00\x04\x61\x72\x63\x68\x01\
|
||||
\x00\x00\x04\xd0\
|
||||
\x00\x00\x05\xb5\
|
||||
\x00\
|
||||
\x00\x1e\xaa\x78\x9c\xed\x59\x6d\x6f\xdb\x36\x10\xfe\x9e\x5f\x41\
|
||||
\xe8\xd3\x06\x6c\x95\xed\xd8\x6e\x13\xc8\x2a\xd6\x74\x79\x01\x5a\
|
||||
\x2c\x81\xd3\xe6\xe3\x20\x4b\x67\x8b\xab\x24\x7a\x24\x95\xd8\xfd\
|
||||
\xf5\x3d\x92\x92\x65\xbd\x58\x89\x63\x27\x01\x82\x00\x31\x22\xf2\
|
||||
\x4e\xc7\xe3\xc3\xe3\xa3\x3b\xd2\xf9\xb8\x88\x23\x72\x0b\x5c\x50\
|
||||
\x96\x8c\xac\xee\xbb\x8e\x45\x20\xf1\x59\x40\x93\xd9\xc8\xfa\x76\
|
||||
\x7d\xfa\xe7\x07\xeb\xa3\x7b\xe0\xa4\xb4\x50\xea\xa3\x92\x7b\x40\
|
||||
\x1c\x3f\xf2\x84\x70\xcf\x52\x7a\x7c\xfc\x99\x7a\x11\x9b\xe1\xff\
|
||||
\x68\x36\x06\x29\xf1\x65\xf1\x17\xf7\x43\xc7\x36\x3a\xa8\x7c\x47\
|
||||
\x83\x19\x48\xa2\xdb\x23\xeb\xea\x46\x37\x2d\x92\x78\x31\x8c\xac\
|
||||
\x36\x1b\x6a\x28\xe2\xcc\x39\x9b\x03\x97\xcb\xec\x85\x19\xb0\x18\
|
||||
\x24\x5f\x6a\x21\x71\x38\xf8\x52\x3f\x11\x67\xe1\x76\x1c\x7b\x91\
|
||||
\x35\x96\xaa\xb1\xcc\x1a\xe8\x81\x0c\xdd\xc1\xfb\x81\x63\x9b\x47\
|
||||
\xd3\x1d\x02\x9d\x85\xd2\x1d\xf6\x8e\x1c\x3b\x7b\xd6\x36\xed\xdc\
|
||||
\xa8\x63\xe7\x83\x37\x79\x72\x47\x93\x80\xdd\x5d\x53\x19\x41\xe6\
|
||||
\x8c\x90\x1c\x7d\x77\xcf\x20\x01\xee\x45\x44\x64\x73\x71\xec\x4c\
|
||||
\x50\x37\x19\x79\x4b\x96\x16\xd8\x7c\xff\xc4\x16\x5f\x74\x57\x66\
|
||||
\xb1\x32\xa4\x98\x7b\x3e\x1a\xb2\xb2\x09\x24\x69\x3c\x01\xee\x0e\
|
||||
\x1d\x3b\x7b\x32\xee\xaf\x8f\x50\x33\x11\x7b\x7c\x46\x93\x8a\x85\
|
||||
\xa3\x56\x0b\x54\x42\x5c\x20\xb9\xbe\x96\x67\x9c\xa5\x73\xf4\x39\
|
||||
\x5f\xcd\x59\xde\x36\xea\xb5\xc1\x65\x01\x56\x03\x5e\x6a\xcd\xc9\
|
||||
\xb8\x01\xb4\xba\x4f\xad\xd0\x65\x83\x61\xd4\x4a\xea\x7b\x91\xe9\
|
||||
\xfd\xb7\x57\x8c\x5b\x4c\xa8\xc1\xd0\x79\xcd\x50\xc8\x38\xfd\xc9\
|
||||
\x12\xd9\x60\xaa\x6a\xac\x0e\xd1\x17\x6f\x02\x51\x6e\x29\x52\x8d\
|
||||
\xd2\xeb\x0d\x18\xc1\x42\x96\x14\x56\x38\x7d\x86\xa9\x97\x46\x68\
|
||||
\x9a\x45\x8c\x93\x29\xfe\xee\xbc\x28\xaa\x22\xd5\x0c\x97\xe9\x34\
|
||||
\xbe\xad\x39\x6f\x97\xbd\xaf\x4d\x46\x05\x1c\xf0\x1a\x0e\x63\xdd\
|
||||
\xdd\x3a\x0d\xd4\x05\x54\x95\xc8\x1b\x95\xd9\x00\x86\x9a\x7b\x25\
|
||||
\x8f\x8f\xcf\x57\xf6\x1c\x5b\x77\xde\x37\x81\xfa\x7e\xa0\x3f\xe1\
|
||||
\x9c\x26\xb8\x52\x42\x06\xb8\xdd\x46\x56\xa7\x0a\x1d\x6a\x94\x7a\
|
||||
\x72\x36\xe8\x77\x4a\x64\xb0\x92\x66\x44\xd0\xeb\x94\x38\xa1\x70\
|
||||
\xab\x6a\x70\x03\xd2\x06\xb8\x2d\x90\x2e\x87\x8d\xa6\xc5\x4b\x0e\
|
||||
\xd3\x13\xb5\xd6\x9f\x52\x29\x11\xc6\x7c\x93\x29\xd9\x1c\x65\x3a\
|
||||
\x0e\x26\x46\xd6\x1a\x51\x8c\x45\xd7\x74\xde\x1c\x54\xd7\x21\x15\
|
||||
\x04\xff\x64\x08\x24\xa8\x05\x58\x02\x77\xe4\x06\x83\x8c\xb0\xc9\
|
||||
\x7f\x48\x8a\x0f\x8f\xb5\x9a\x13\xda\x66\xc5\x05\xdd\x57\xc1\x9f\
|
||||
\x43\xe0\xf6\x06\x03\x45\xc2\x41\x45\x34\xe3\x00\x89\xdb\x3d\xc2\
|
||||
\xa5\x31\x8f\x65\xf1\x24\x4a\xc1\xed\xbe\x47\xa9\x7e\x2a\x2f\x5b\
|
||||
\x6d\xa8\x87\x79\xad\x60\xfe\x3b\x51\x9f\x9b\x8d\x11\xe6\x67\x88\
|
||||
\x28\x98\xf4\x6a\xe1\x60\x8f\x05\x49\x0d\x77\xe9\xc9\xf0\xfe\xd1\
|
||||
\xbe\xb2\xc0\xce\xbe\xb3\xfb\xda\xfd\x8e\x6d\x98\x70\x45\x93\x25\
|
||||
\xf1\xae\xa4\xb9\x13\x65\xee\x8d\x30\x51\x90\xfa\x32\xe5\xf0\x72\
|
||||
\xac\x79\x0f\xfd\xbf\xf1\xe6\x73\xf2\xe6\x7d\xdf\xe2\xdd\x98\x73\
|
||||
\x9c\x47\xdb\xf3\xd2\x67\x77\xd0\x69\xa1\xcf\xe1\x51\x1b\x7d\x7e\
|
||||
\x18\xbe\x10\x7d\xae\xb0\x7a\xe3\xd0\xcd\x89\xe7\x70\xb7\xc4\x73\
|
||||
\xb0\xbf\xc4\x53\xd7\x3e\x2f\x48\xa2\xfd\x37\x12\xdd\x8c\xf5\x73\
|
||||
\x93\xe8\x61\xeb\x62\x6c\x43\x5d\x83\xa3\x16\xe6\x3a\xec\xb5\x31\
|
||||
\x57\xff\xa5\x98\xeb\x46\xef\x85\xd7\x4b\x5b\x65\x61\xc9\xd6\x9a\
|
||||
\xde\x23\x4e\x09\x8a\x8f\xef\xc3\xce\x09\x2e\x4e\x4f\x08\x8d\xe7\
|
||||
\x8c\xcb\x7d\x1f\x0e\xec\xef\x68\x60\xf0\x70\x86\x2e\xb6\x59\x08\
|
||||
\xfe\x8f\x75\x7c\x56\x7b\x4c\x09\x26\xc5\x71\x4a\x33\x56\x6d\x39\
|
||||
\xca\xc5\x14\xd3\x13\x93\xa6\x68\x63\x10\xfc\xa1\xf3\x15\x84\xf2\
|
||||
\x9f\x39\x24\xe3\x10\xb0\xb6\x33\x98\x82\x62\x75\x6c\x4d\x80\xa4\
|
||||
\x42\xe9\x61\x3d\xc3\x90\xe7\x67\x44\xb2\x4c\x85\xc4\x8c\xeb\x77\
|
||||
\x89\x5c\xce\xb7\x48\xa1\xb7\xf8\xd4\x7c\x13\x55\xe7\xa6\xc4\xbb\
|
||||
\xf5\x28\x7e\xc0\x22\x78\xfc\x80\x5b\x6c\x67\x9c\xfc\xc5\xd4\x5f\
|
||||
\x39\xf0\x2a\xb7\xf4\xee\x71\x7e\xf8\x14\x71\xbe\x4b\x36\x7e\xc2\
|
||||
\xc1\x93\x20\x88\x26\x17\xa1\x93\x14\xf0\xfc\xd0\x1c\x2a\x9a\xf4\
|
||||
\x5b\x47\xed\x53\x04\xad\x26\x38\xcc\x8e\x70\x93\x24\x98\x77\x08\
|
||||
\x32\x59\xee\xba\x43\xb6\x08\x58\x5f\xcf\x1c\x63\x56\xbb\x21\xde\
|
||||
\x02\xb6\x31\x60\xfb\x4f\x12\xb0\xed\x99\xcf\xe6\x88\xb9\x30\x7c\
|
||||
\x3a\x4d\x79\x42\x75\x81\xf8\x9b\xef\x25\x24\xf6\x7e\x80\xa6\xe7\
|
||||
\x98\x05\x10\x91\x10\xbc\xdb\xe5\xef\xcf\x12\x43\x86\xdf\x31\x86\
|
||||
\x4e\x73\x8f\x5e\x65\x18\x6d\x9f\xca\x94\xaa\x90\x3c\x69\x28\x1f\
|
||||
\x7f\x3f\xa4\xf8\x28\xea\x8e\xef\x99\x8d\x52\xd5\x51\x4f\x60\xb6\
|
||||
\xa8\x35\xca\x65\x46\x56\x61\xf4\x6a\x15\x46\x5e\x5c\xf4\x6b\xc5\
|
||||
\x45\xa9\xae\xa8\xba\x52\xaa\x26\x0a\x90\xd6\x90\x5c\x83\x31\xdb\
|
||||
\x97\xf9\x69\x48\x76\x5d\x35\xb2\x86\x16\x31\xf7\x4e\x23\xab\xdb\
|
||||
\xb5\x6c\xa5\x39\xa7\x8b\xd8\x9b\x4f\xd3\xc4\x57\x40\xb9\xff\x5f\
|
||||
\xea\xf6\x29\x67\xf1\x57\x1a\xc3\x98\xa5\xdc\xc7\x18\xac\x68\xa9\
|
||||
\xab\xc7\x54\x48\x16\x9b\x11\x85\xf6\x64\xbd\xc7\x78\xb9\x76\x3d\
|
||||
\xb9\x56\xc2\x14\x57\x92\x6a\x3d\x16\x12\x92\x40\xb8\x57\x97\xa9\
|
||||
\x08\x73\x79\xde\x79\x60\xe0\xf2\x02\x9c\x36\x5a\xb1\xcd\x95\xa5\
|
||||
\x78\x17\x2a\xe4\x74\xaf\x46\xa0\x3a\x70\xbb\x27\x95\x82\xaa\xd1\
|
||||
\x9b\xba\xcb\x9b\x5c\x52\xd6\xf6\xe7\x56\xc6\x73\xcd\x08\x15\xd2\
|
||||
\xdd\x9d\x29\x77\xe8\xeb\x61\x0e\x42\x2f\xb6\xd0\x61\xe1\xb3\x24\
|
||||
\x01\xbd\xd8\xaa\xed\xd8\x29\x75\x0f\x7e\x01\x09\x6b\xe1\xfc\
|
||||
\x00\x27\xfd\x78\x9c\xed\x5a\x6d\x4f\xe3\x38\x10\xfe\xce\xaf\xb0\
|
||||
\xf2\xe9\x4e\xba\x23\xa5\x50\x58\x50\x9a\xd5\x2d\x1c\x0b\xd2\xae\
|
||||
\x8e\xbd\xb2\xbb\x1f\x4f\x69\x32\x6d\x7c\x9b\xd8\x39\xc7\xa1\xed\
|
||||
\xfe\xfa\x1b\xdb\x49\xd3\xbc\x34\x50\x5a\x40\x42\x20\x10\xb1\xc7\
|
||||
\x9d\x19\x3f\x9e\x79\x3c\x76\xe3\xbc\x9f\xc7\x11\xb9\x03\x91\x52\
|
||||
\xce\x86\xd6\xc1\x7e\xcf\x22\xc0\x7c\x1e\x50\x36\x1d\x5a\x5f\x6f\
|
||||
\x2f\x7f\x7f\x67\xbd\x77\xf7\x9c\x8c\x96\x83\x8e\x70\x90\xbb\x47\
|
||||
\x1c\x3f\xf2\xd2\xd4\xfd\x98\xd1\xb3\xb3\x0b\xea\x45\x7c\x8a\xff\
|
||||
\xa3\xe9\x08\xa4\xc4\x0f\xa7\x7f\x08\x3f\x74\x6c\x33\x06\x07\xcf\
|
||||
\x68\x30\x05\x49\x74\x7b\x68\x7d\xf9\xae\x9b\x16\x61\x5e\x0c\x43\
|
||||
\xab\x4b\x87\x32\x45\x9c\x44\xf0\x04\x84\x5c\xe4\x1f\x98\x02\x8f\
|
||||
\x41\x8a\x85\x16\x12\x47\x80\x2f\xf5\x13\x71\xe6\x6e\xcf\xb1\xe7\
|
||||
\x79\x63\xa1\x1a\x8b\xbc\x81\x1e\xc8\xd0\x1d\x9c\x0c\x1c\xdb\x3c\
|
||||
\x9a\xee\x10\xe8\x34\x94\xee\x71\xff\xd4\xb1\xf3\x67\xad\xd3\x2e\
|
||||
\x94\x3a\x76\x61\xbc\xcd\x93\x19\x65\x01\x9f\xdd\x52\x19\x41\xee\
|
||||
\x4c\x2a\x05\xfa\xee\x7e\x04\x06\xc2\x8b\x48\x9a\xcf\xc5\xb1\x73\
|
||||
\x41\x53\x65\xe4\x2d\x78\x56\x62\xf3\xed\x03\x9f\x7f\xd2\x5d\xb9\
|
||||
\xc6\x9a\xc9\x34\xf1\x7c\x54\x64\xe5\x13\x60\x59\x3c\x06\xe1\x1e\
|
||||
\x3b\x76\xfe\x64\xdc\x5f\xb5\xd0\x50\x11\x7b\x62\x4a\x59\x4d\xc3\
|
||||
\x69\xa7\x06\x2a\x21\x2e\x91\x5c\x5d\xcb\x8f\x82\x67\x09\xfa\x5c\
|
||||
\xac\xe6\xb4\x68\x9b\xe1\x0d\xe3\xb2\x04\xab\x05\x2f\xb5\xe6\x64\
|
||||
\xd4\x02\x5a\xd3\xa7\x4e\xe8\x72\x63\x18\xb5\x92\xfa\x5e\x64\x7a\
|
||||
\xff\xe9\x97\x76\xcb\x09\xb5\x28\xba\x6a\x28\x0a\xb9\xa0\x3f\x39\
|
||||
\x93\x2d\xaa\xea\xca\x9a\x10\x7d\xf2\xc6\x10\x15\x9a\x22\xd5\xa8\
|
||||
\x7c\xbc\x05\x23\x98\xcb\xca\x80\x25\x4e\x17\x30\xf1\xb2\x08\x55\
|
||||
\xf3\x88\x0b\x32\xc1\xbf\x99\x17\x45\x75\xa4\xda\xe1\x32\x9d\xc6\
|
||||
\xb7\x15\xe7\xed\xaa\xf7\x8d\xc9\xa8\x80\x03\xd1\xc0\x61\xa4\xbb\
|
||||
\x3b\xa7\x81\x63\x01\x87\x4a\xe4\x8d\xda\x6c\x00\x43\xcd\xfd\x22\
|
||||
\xcf\xce\xae\x96\xfa\x1c\x5b\x77\xde\x37\x81\x66\x3e\xd0\x9f\x70\
|
||||
\x45\x19\xae\x54\x2a\x03\x4c\xb7\xa1\xd5\xab\x43\x87\x23\x2a\x3d\
|
||||
\x05\x1b\x1c\xf5\x2a\x64\xb0\x94\xe6\x44\xd0\xef\x55\x38\xa1\x74\
|
||||
\xab\xae\x70\x0d\xd2\x06\xb8\x0d\x90\xae\x86\x8d\xa6\xc5\x1b\x01\
|
||||
\x93\x73\xb5\xd6\x1f\x32\x29\x11\xc6\x22\xc9\x94\x2c\x41\x99\x8e\
|
||||
\x83\xb1\x91\x75\x46\x14\xe7\xd1\x2d\x4d\xda\x83\xea\x36\xa4\x29\
|
||||
\xc1\x5f\x19\x02\x09\x1a\x01\xc6\x60\x46\xbe\x63\x90\x11\x3e\xfe\
|
||||
\x17\x49\xf1\xe1\xb1\xd6\x70\x42\xeb\xac\xb9\xa0\xfb\x6a\xf8\x0b\
|
||||
\x08\xdc\xfe\x60\xa0\x48\x38\xa8\x89\xa6\x02\x80\xb9\x07\xa7\xb8\
|
||||
\x34\xe6\xb1\x2a\x1e\x47\x19\xb8\x07\x27\x28\xd5\x4f\xd5\x65\x6b\
|
||||
\x98\x7a\x98\xd7\x0a\xe6\x3f\x99\xda\x6e\xd6\x46\x98\x9f\x23\xa2\
|
||||
\x60\xd2\xab\x85\xc6\x1e\x0b\x92\x32\x77\xe3\xc9\xf0\x7e\x6b\x9f\
|
||||
\x79\x60\xe7\xfb\xec\xae\xb2\xdf\xb1\x0d\x13\x2e\x69\xb2\x22\xde\
|
||||
\x96\x34\xb7\xa2\xcc\x9d\x11\x26\x0a\x32\x5f\x66\x02\x5e\x8e\x35\
|
||||
\xef\xa1\xff\x37\xde\x7c\x4e\xde\xbc\x6f\x2f\xde\x8e\x39\x47\x45\
|
||||
\xb4\x3d\x2f\x7d\x1e\x0c\x7a\x1d\xf4\x79\x7c\xda\x45\x9f\xef\x8e\
|
||||
\x5f\x88\x3e\x97\x58\xbd\x71\xe8\xfa\xc2\xf3\x78\xbb\xc2\x73\xb0\
|
||||
\xbb\xc2\x53\x9f\x7d\x5e\x90\x44\x8f\xde\x48\x74\x3d\xd6\xcf\x4d\
|
||||
\xa2\x87\x9d\x8b\xb1\x09\x75\x0d\x4e\x3b\x98\xeb\xb0\xdf\xc5\x5c\
|
||||
\x47\x2f\xc5\x5c\xdf\x75\x2e\xbc\x5e\xda\xaa\x0a\x2b\xba\x56\xc6\
|
||||
\x3d\xe2\x96\xa0\xdc\x7c\x1f\x76\x4f\x70\x7d\x79\x4e\x68\x9c\x70\
|
||||
\x21\x77\x7d\x39\xb0\xbb\xab\x81\xc1\xc3\x19\xba\x4c\xb3\x10\xfc\
|
||||
\x1f\xab\xf8\x2c\x73\x4c\x09\xc6\xe5\x75\x4a\x3b\x56\x5d\x35\xca\
|
||||
\xf5\x04\xcb\x13\x53\xa6\x68\x65\x10\xfc\xa6\xeb\x15\x84\xf2\xaf\
|
||||
\x04\xd8\x28\x04\x3c\xdb\x19\x4c\x41\xb1\x3a\xb6\xc6\x40\xb2\x54\
|
||||
\x8d\xc3\xf3\x0c\x47\x9e\x9f\x12\xc9\xf3\x21\x24\xe6\x42\x7f\x96\
|
||||
\xc8\x45\xb2\x41\x09\xbd\xc1\x56\xf3\x35\xad\x3b\x37\x21\xde\x9d\
|
||||
\x47\x71\x03\x8b\xe0\xf1\x06\x37\x48\x67\x9c\xfc\xf5\xc4\x5f\x3a\
|
||||
\xf0\x2a\x53\x7a\xfb\x38\x3f\x7c\x8a\x38\xdf\xa6\x1a\x3f\x17\xe0\
|
||||
\x49\x48\x89\x26\x97\x54\x17\x29\xe0\xf9\xa1\xb9\x54\x34\xe5\xb7\
|
||||
\x8e\xda\xa7\x08\x5a\x4d\x70\x58\x1d\x61\x92\x30\xac\x3b\x52\x32\
|
||||
\x5e\x6c\x9b\x21\x1b\x04\xac\xaf\x67\x8e\x31\xab\xdd\x48\xdf\x02\
|
||||
\xb6\x35\x60\x8f\x9e\x24\x60\xbb\x2b\x9f\xf5\x11\x73\x6d\xf8\x74\
|
||||
\x92\x09\x46\xf5\x01\xf1\x17\xdf\x63\x24\xf6\x7e\x80\xa6\xe7\x98\
|
||||
\x07\x10\x91\x10\xbc\xbb\xc5\xaf\xcf\x12\x43\x86\xdf\x31\x86\x2e\
|
||||
\x0b\x8f\x5e\x65\x18\x3d\x5d\x29\x73\xb8\x59\x29\xd3\xbf\x20\x02\
|
||||
\x58\x00\xaa\xb1\xf3\x6f\x3a\x0e\x77\x57\xce\x9c\x3c\x49\xd6\x74\
|
||||
\x1f\xde\x3a\x69\x7e\x14\xf2\x19\x09\x60\x9c\x4d\x09\x65\x48\xf2\
|
||||
\xb1\x3e\xe4\x91\x20\x53\x52\xd2\x01\xeb\x06\xf1\xbb\x3e\x6d\xb5\
|
||||
\x75\x63\x01\xcb\x25\xe3\x46\x0c\x69\xea\x4d\x9f\x89\xeb\x95\x03\
|
||||
\xdf\xfe\xfe\x7c\xa1\x2c\xbf\xca\x0c\xdd\x3e\x64\xdf\x6d\x77\x47\
|
||||
\xf2\x58\x46\x3f\x47\x2f\x3d\xdc\x89\x53\x12\x51\xa6\x58\x9c\xfa\
|
||||
\x3f\x18\x86\x06\x11\x2a\x42\x5f\xee\xa2\xa4\x7b\x3e\x6f\x17\x25\
|
||||
\x3b\xb9\x28\xb9\xe0\x19\x1e\x4f\x46\x09\x65\x6d\xbc\x17\x68\x69\
|
||||
\x8a\xd2\xad\xce\x72\xa3\x04\x7c\x3a\xa1\x58\xe3\x2a\x16\x8a\x3d\
|
||||
\x86\x45\x26\x45\xf6\xd1\x15\xc3\x1d\x85\x19\x04\xf5\xd8\x8b\xb3\
|
||||
\x54\xaa\x03\x9d\x97\x24\x11\x45\x31\x9e\xe4\x7c\x8c\x53\x35\x6a\
|
||||
\x0b\xbe\xba\xf3\xa2\x0c\x6a\x3e\x9a\x39\xba\xfd\xfd\x5e\xf5\xc7\
|
||||
\xb1\x73\xc9\x53\xb2\x22\xe6\xde\x27\x9c\xd2\x6d\x31\xef\x57\xc9\
|
||||
\x8c\x9b\xd7\x2e\x15\x62\x28\x6a\x84\xea\x57\xf7\x0f\xe1\x83\x92\
|
||||
\x0a\xbe\xe5\x3a\x2a\x44\xd0\xac\x57\x36\x48\xff\x6a\xe6\xe7\x49\
|
||||
\xdf\x6f\x24\x7d\x91\xef\x47\x8d\x7c\xaf\xa4\x7a\xdd\x95\x4a\x82\
|
||||
\x97\x20\xad\x20\xb9\x02\x63\xbe\xd5\x14\xdf\xe4\xe4\xaf\xda\x0c\
|
||||
\xad\x63\x8b\x98\x77\x66\x86\xd6\xc1\x81\x65\xab\x91\x09\x9d\xc7\
|
||||
\x5e\x32\xc9\x98\xaf\x80\x72\xff\xbb\xd1\xed\x4b\xc1\xe3\xcf\x98\
|
||||
\x90\x23\x9e\x09\x1f\xeb\xe7\xda\x28\xf5\xda\x14\xa6\x23\x8f\x8d\
|
||||
\xc5\x54\x7b\xb2\xda\x63\xbc\x5c\x79\xb5\x6a\xe5\xfa\xb5\x7c\x9d\
|
||||
\x4a\xad\xc7\x5c\x62\x09\x92\xba\x5f\x6e\xb2\x34\x2c\xe4\x45\xe7\
|
||||
\x9e\x81\xcb\xc3\x12\x45\x69\xb1\xcd\xeb\x56\xe9\x7e\xa8\x90\xd3\
|
||||
\xbd\x1a\x81\xba\xe1\x6e\x4f\x6a\x97\xc1\xad\xde\x34\x5d\x5e\xe7\
|
||||
\x92\xd2\xb6\x3b\xb7\xf2\x6a\xb3\x1d\xa1\x52\xfa\x2c\xce\x54\xf6\
|
||||
\x81\x76\x8f\x6a\x43\xb6\x77\xab\xda\xa1\xdf\xb8\x13\x90\xea\x18\
|
||||
\x4c\x75\xb4\xfa\x9c\x31\xd0\x31\xa8\xda\x8e\x9d\x51\x77\xef\x7f\
|
||||
\xd6\x19\x97\xf4\
|
||||
\x00\x00\x07\x4c\
|
||||
\x00\
|
||||
\x00\x29\xd1\x78\x9c\xed\x59\x5b\x8f\xe2\x46\x16\x7e\xef\x5f\xe1\
|
||||
|
@ -11371,35 +11386,35 @@ qt_resource_struct = "\
|
|||
\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x6e\
|
||||
\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x7e\
|
||||
\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x05\x6e\x00\x01\x00\x00\x00\x01\x00\x02\x52\xde\
|
||||
\x00\x00\x04\x7a\x00\x00\x00\x00\x00\x01\x00\x02\x15\x0f\
|
||||
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x13\
|
||||
\x00\x00\x06\x9e\x00\x01\x00\x00\x00\x01\x00\x02\xa9\x48\
|
||||
\x00\x00\x05\x40\x00\x01\x00\x00\x00\x01\x00\x02\x4c\x0c\
|
||||
\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x82\
|
||||
\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x09\
|
||||
\x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x01\x9c\x71\
|
||||
\x00\x00\x06\x38\x00\x00\x00\x00\x00\x01\x00\x02\x86\x04\
|
||||
\x00\x00\x04\xba\x00\x00\x00\x00\x00\x01\x00\x02\x2e\xe9\
|
||||
\x00\x00\x04\x5a\x00\x01\x00\x00\x00\x01\x00\x02\x0d\x47\
|
||||
\x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\
|
||||
\x00\x00\x06\x0e\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x6f\
|
||||
\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xda\
|
||||
\x00\x00\x02\x4e\x00\x01\x00\x00\x00\x01\x00\x01\x82\xd0\
|
||||
\x00\x00\x02\x78\x00\x01\x00\x00\x00\x01\x00\x01\x8c\x78\
|
||||
\x00\x00\x04\xea\x00\x01\x00\x00\x00\x01\x00\x02\x3e\x57\
|
||||
\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x04\
|
||||
\x00\x00\x05\x18\x00\x01\x00\x00\x00\x01\x00\x02\x43\xa7\
|
||||
\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\
|
||||
\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x02\x59\xb8\
|
||||
\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x20\
|
||||
\x00\x00\x05\xe2\x00\x01\x00\x00\x00\x01\x00\x02\x75\xf5\
|
||||
\x00\x00\x05\xc2\x00\x01\x00\x00\x00\x01\x00\x02\x6b\xbb\
|
||||
\x00\x00\x04\x9a\x00\x01\x00\x00\x00\x01\x00\x02\x28\xd1\
|
||||
\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x02\x97\xd3\
|
||||
\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x01\xa4\xb3\
|
||||
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x08\
|
||||
\x00\x00\x02\x1a\x00\x01\x00\x00\x00\x01\x00\x01\x7b\x80\
|
||||
\x00\x00\x05\x6e\x00\x01\x00\x00\x00\x01\x00\x02\x53\xc3\
|
||||
\x00\x00\x04\x7a\x00\x00\x00\x00\x00\x01\x00\x02\x15\xf4\
|
||||
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\xf8\
|
||||
\x00\x00\x06\x9e\x00\x01\x00\x00\x00\x01\x00\x02\xaa\x2d\
|
||||
\x00\x00\x05\x40\x00\x01\x00\x00\x00\x01\x00\x02\x4c\xf1\
|
||||
\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc6\x67\
|
||||
\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\xee\
|
||||
\x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x01\x9d\x56\
|
||||
\x00\x00\x06\x38\x00\x00\x00\x00\x00\x01\x00\x02\x86\xe9\
|
||||
\x00\x00\x04\xba\x00\x00\x00\x00\x00\x01\x00\x02\x2f\xce\
|
||||
\x00\x00\x04\x5a\x00\x01\x00\x00\x00\x01\x00\x02\x0e\x2c\
|
||||
\x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x94\x5d\
|
||||
\x00\x00\x06\x0e\x00\x01\x00\x00\x00\x01\x00\x02\x7f\x54\
|
||||
\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xcf\xbf\
|
||||
\x00\x00\x02\x4e\x00\x01\x00\x00\x00\x01\x00\x01\x83\xb5\
|
||||
\x00\x00\x02\x78\x00\x01\x00\x00\x00\x01\x00\x01\x8d\x5d\
|
||||
\x00\x00\x04\xea\x00\x01\x00\x00\x00\x01\x00\x02\x3f\x3c\
|
||||
\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\xe9\
|
||||
\x00\x00\x05\x18\x00\x01\x00\x00\x00\x01\x00\x02\x44\x8c\
|
||||
\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x06\x6a\
|
||||
\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x02\x5a\x9d\
|
||||
\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xdf\x05\
|
||||
\x00\x00\x05\xe2\x00\x01\x00\x00\x00\x01\x00\x02\x76\xda\
|
||||
\x00\x00\x05\xc2\x00\x01\x00\x00\x00\x01\x00\x02\x6c\xa0\
|
||||
\x00\x00\x04\x9a\x00\x01\x00\x00\x00\x01\x00\x02\x29\xb6\
|
||||
\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x02\x98\xb8\
|
||||
\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x01\xa5\x98\
|
||||
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x01\xe6\xed\
|
||||
\x00\x00\x02\x1a\x00\x01\x00\x00\x00\x01\x00\x01\x7c\x65\
|
||||
\x00\x00\x01\xf2\x00\x01\x00\x00\x00\x01\x00\x01\x76\xac\
|
||||
"
|
||||
|
||||
|
|
|
@ -3,43 +3,525 @@
|
|||
<context>
|
||||
<name>Arch</name>
|
||||
<message>
|
||||
<location filename="Component.py" line="151"/>
|
||||
<location filename="ArchWindow.py" line="472"/>
|
||||
<source>Components</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Component.py" line="153"/>
|
||||
<source>Remove child</source>
|
||||
<location filename="ArchComponent.py" line="248"/>
|
||||
<source>Components of this object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Component.py" line="154"/>
|
||||
<source>Components of this object</source>
|
||||
<location filename="ArchComponent.py" line="253"/>
|
||||
<source>Axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="60"/>
|
||||
<source>Create Axis</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="74"/>
|
||||
<source>The intervals between axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="75"/>
|
||||
<source>The angles of each axis</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="76"/>
|
||||
<source>The length of the axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="109"/>
|
||||
<source>The size of the axis bubbles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="110"/>
|
||||
<source>The numeration style</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="466"/>
|
||||
<source>Remove</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="467"/>
|
||||
<source>Add</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="353"/>
|
||||
<source>Distances and angles between axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="354"/>
|
||||
<source>Axis</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="354"/>
|
||||
<source>Distance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="354"/>
|
||||
<source>Angle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchBuilding.py" line="32"/>
|
||||
<source>Building</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSite.py" line="55"/>
|
||||
<source>Type conversion</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchBuilding.py" line="63"/>
|
||||
<source> Create Building</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchFloor.py" line="70"/>
|
||||
<source>Floor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="131"/>
|
||||
<source>removing sketch support to avoid cross-referencing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="294"/>
|
||||
<source>No objects are cut by the plane</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="476"/>
|
||||
<source>is not closed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="478"/>
|
||||
<source>is not valid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="480"/>
|
||||
<source>doesn't contain any solid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="486"/>
|
||||
<source>contains a non-closed solid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="488"/>
|
||||
<source>contains faces that are not part of any solid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="509"/>
|
||||
<source>Grouping</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="539"/>
|
||||
<source>Ungrouping</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="573"/>
|
||||
<source>Split Mesh</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="611"/>
|
||||
<source>Mesh to Shape</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="695"/>
|
||||
<source>All good! no problems found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchComponent.py" line="249"/>
|
||||
<source>Base component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchComponent.py" line="250"/>
|
||||
<source>Additions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchComponent.py" line="251"/>
|
||||
<source>Subtractions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchComponent.py" line="252"/>
|
||||
<source>Objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchComponent.py" line="321"/>
|
||||
<source>closing Sketch edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchFloor.py" line="79"/>
|
||||
<source>The height of this floor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="33"/>
|
||||
<source>Roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="76"/>
|
||||
<source>Create Roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="83"/>
|
||||
<source>Unable to create a roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="85"/>
|
||||
<source>No object selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="91"/>
|
||||
<source>The angle of this roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="93"/>
|
||||
<source>The face number of the base object used to build this roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="55"/>
|
||||
<source>Page</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="65"/>
|
||||
<source>View of</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="84"/>
|
||||
<source>Create Section Plane</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="95"/>
|
||||
<source>The objects that must be considered by this section plane. Empty means all document</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="116"/>
|
||||
<source>The display size of this section plane</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="236"/>
|
||||
<source>No shape has been computed yet, select wireframe rendering and render again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSectionPlane.py" line="280"/>
|
||||
<source>Skipping invalid object: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSite.py" line="32"/>
|
||||
<source>Site</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchSite.py" line="73"/>
|
||||
<source>Create Site</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="33"/>
|
||||
<source>Structure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="71"/>
|
||||
<source>Create Structure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="93"/>
|
||||
<source>The length of this element, if not based on a profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="95"/>
|
||||
<source>The width of this element, if not based on a profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="97"/>
|
||||
<source>The height or extrusion depth of this element. Keep 0 for automatic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="99"/>
|
||||
<source>Axes systems this structure is built on</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="256"/>
|
||||
<source>The normal extrusion direction of this object (keep (0,0,0) for automatic normal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchStructure.py" line="103"/>
|
||||
<source>The element numbers to exclude when this structure is based on axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="438"/>
|
||||
<source>Couldn't compute the wall shape</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="33"/>
|
||||
<source>Wall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="151"/>
|
||||
<source>Create Wall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="175"/>
|
||||
<source>WallTrace</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="197"/>
|
||||
<source>Wall options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="201"/>
|
||||
<source>Width</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="209"/>
|
||||
<source>Height</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="217"/>
|
||||
<source>Alignment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="224"/>
|
||||
<source>Continue</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="250"/>
|
||||
<source>The width of this wall. Not used if this wall is based on a face</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="252"/>
|
||||
<source>The height of this wall. Keep 0 for automatic. Not used if this wall is based on a solid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="254"/>
|
||||
<source>The alignment of this wall on its base object, if applicable</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="258"/>
|
||||
<source>If True, if this wall is based on a face, it will use its border wire as trace, and disconsider the face.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="384"/>
|
||||
<source>Error: Invalid base object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="393"/>
|
||||
<source>This mesh is an invalid solid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWall.py" line="443"/>
|
||||
<source>Error removing splitter from wall shape</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="33"/>
|
||||
<source>Window</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="93"/>
|
||||
<source>Create Window</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="114"/>
|
||||
<source>the components of this window</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="442"/>
|
||||
<source>Unable to create component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="468"/>
|
||||
<source>Edit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="469"/>
|
||||
<source>Create/update component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="470"/>
|
||||
<source>Base 2D object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="476"/>
|
||||
<source>Wires</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="473"/>
|
||||
<source>Create new component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="474"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="475"/>
|
||||
<source>Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="477"/>
|
||||
<source>Thickness</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchWindow.py" line="478"/>
|
||||
<source>Z offset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importDAE.py" line="40"/>
|
||||
<source>pycollada not found, no collada support.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importDAE.py" line="74"/>
|
||||
<source>Error: Couldn't determine character encoding</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importDAE.py" line="152"/>
|
||||
<source>file %s successfully created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importIFC.py" line="83"/>
|
||||
<source>Error: Couldn't determine character encoding
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importIFC.py" line="105"/>
|
||||
<source>Couldn't locate IfcOpenShell
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importIFC.py" line="121"/>
|
||||
<source>IFC Schema not found, IFC import disabled.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="importOBJ.py" line="95"/>
|
||||
<source>successfully written </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Add</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="221"/>
|
||||
<location filename="ArchCommands.py" line="498"/>
|
||||
<source>Add component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Commands.py" line="222"/>
|
||||
<location filename="ArchCommands.py" line="499"/>
|
||||
<source>Adds the selected components to the active object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Axis</name>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="55"/>
|
||||
<source>Axis</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchAxis.py" line="57"/>
|
||||
<source>Creates an axis system.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Building</name>
|
||||
<message>
|
||||
<location filename="Building.py" line="47"/>
|
||||
<location filename="ArchBuilding.py" line="46"/>
|
||||
<source>Building</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Building.py" line="49"/>
|
||||
<location filename="ArchBuilding.py" line="48"/>
|
||||
<source>Creates a building object including selected objects.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -47,54 +529,80 @@
|
|||
<context>
|
||||
<name>Arch_Cell</name>
|
||||
<message>
|
||||
<location filename="Cell.py" line="49"/>
|
||||
<location filename="ArchCell.py" line="50"/>
|
||||
<source>Cell</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Cell.py" line="51"/>
|
||||
<location filename="ArchCell.py" line="52"/>
|
||||
<source>Creates a cell object including selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Check</name>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="683"/>
|
||||
<source>Check</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="684"/>
|
||||
<source>Checks the selected objects for problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_CloseHoles</name>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="664"/>
|
||||
<source>Close holes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="665"/>
|
||||
<source>Closes holes in open shapes, turning them solids</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Floor</name>
|
||||
<message>
|
||||
<location filename="Floor.py" line="48"/>
|
||||
<location filename="ArchFloor.py" line="47"/>
|
||||
<source>Floor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Floor.py" line="50"/>
|
||||
<location filename="ArchFloor.py" line="49"/>
|
||||
<source>Creates a floor object including selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_MeshToPart</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="294"/>
|
||||
<source>Turns selected meshes into Part Shape objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_MeshToShape</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="293"/>
|
||||
<location filename="ArchCommands.py" line="589"/>
|
||||
<source>Mesh to Shape</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchCommands.py" line="590"/>
|
||||
<source>Turns selected meshes into Part Shape objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Remove</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="242"/>
|
||||
<location filename="ArchCommands.py" line="528"/>
|
||||
<source>Remove component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Commands.py" line="243"/>
|
||||
<location filename="ArchCommands.py" line="529"/>
|
||||
<source>Remove the selected components from their parents, or create a hole in a component</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -102,38 +610,51 @@
|
|||
<context>
|
||||
<name>Arch_RemoveShape</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="350"/>
|
||||
<location filename="ArchCommands.py" line="647"/>
|
||||
<source>Remove Shape from Arch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Commands.py" line="351"/>
|
||||
<location filename="ArchCommands.py" line="648"/>
|
||||
<source>Removes cubic shapes from Arch components</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_Roof</name>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="50"/>
|
||||
<source>Roof</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ArchRoof.py" line="52"/>
|
||||
<source>Creates a roof object from the selected face of an object</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_SectionPlane</name>
|
||||
<message>
|
||||
<location filename="SectionPlane.py" line="12"/>
|
||||
<location filename="ArchSectionPlane.py" line="73"/>
|
||||
<source>Section Plane</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="SectionPlane.py" line="13"/>
|
||||
<source>Adds a section plane object to the document</source>
|
||||
<location filename="ArchSectionPlane.py" line="74"/>
|
||||
<source>Creates a section plane object, including the selected objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Arch_SelectNonSolidMeshes</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="325"/>
|
||||
<location filename="ArchCommands.py" line="622"/>
|
||||
<source>Select non-manifold meshes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Commands.py" line="326"/>
|
||||
<location filename="ArchCommands.py" line="623"/>
|
||||
<source>Selects all non-manifold meshes from the document or from the selected groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -141,12 +662,12 @@
|
|||
<context>
|
||||
<name>Arch_Site</name>
|
||||
<message>
|
||||
<location filename="Site.py" line="45"/>
|
||||
<location filename="ArchSite.py" line="46"/>
|
||||
<source>Site</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Site.py" line="47"/>
|
||||
<location filename="ArchSite.py" line="48"/>
|
||||
<source>Creates a site object including selected objects.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -154,12 +675,12 @@
|
|||
<context>
|
||||
<name>Arch_SplitMesh</name>
|
||||
<message>
|
||||
<location filename="Commands.py" line="266"/>
|
||||
<location filename="ArchCommands.py" line="561"/>
|
||||
<source>Split Mesh</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Commands.py" line="267"/>
|
||||
<location filename="ArchCommands.py" line="562"/>
|
||||
<source>Splits selected meshes into independent components</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -167,12 +688,12 @@
|
|||
<context>
|
||||
<name>Arch_Structure</name>
|
||||
<message>
|
||||
<location filename="Structure.py" line="63"/>
|
||||
<location filename="ArchStructure.py" line="66"/>
|
||||
<source>Structure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Structure.py" line="65"/>
|
||||
<location filename="ArchStructure.py" line="68"/>
|
||||
<source>Creates a structure object from scratch or from a selected object (sketch, wire, face or solid)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -180,12 +701,12 @@
|
|||
<context>
|
||||
<name>Arch_Wall</name>
|
||||
<message>
|
||||
<location filename="Wall.py" line="56"/>
|
||||
<location filename="ArchWall.py" line="100"/>
|
||||
<source>Wall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Wall.py" line="58"/>
|
||||
<location filename="ArchWall.py" line="102"/>
|
||||
<source>Creates a wall object from scratch or from a selected object (wire, face or solid)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -193,13 +714,13 @@
|
|||
<context>
|
||||
<name>Arch_Window</name>
|
||||
<message>
|
||||
<location filename="Window.py" line="53"/>
|
||||
<location filename="ArchWindow.py" line="74"/>
|
||||
<source>Window</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="Window.py" line="55"/>
|
||||
<source>Creates a window object from scratch or from a selected object (wire, rectangle or sketch)</source>
|
||||
<location filename="ArchWindow.py" line="76"/>
|
||||
<source>Creates a window object from a selected object (wire, rectangle or sketch)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -235,32 +756,113 @@
|
|||
<source>This is the default color for new Structure objects</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="122"/>
|
||||
<source>Default color for windows</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="164"/>
|
||||
<source>IFC import</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="172"/>
|
||||
<source>If this is checked, the IFCOpenShell importer will be used, allowing to import more IFC types</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="175"/>
|
||||
<source>Use IFCOpenShell if available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="192"/>
|
||||
<source>Creates groups for each Arch object type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="195"/>
|
||||
<source>Group components by types</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="212"/>
|
||||
<source>Import furniture (can make the model heavy)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="230"/>
|
||||
<source>2D rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="238"/>
|
||||
<source>Show debug information during 2D rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="241"/>
|
||||
<source>Show renderer debug messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="258"/>
|
||||
<source>Cut areas line thickness ratio</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="archprefs-base.ui" line="278"/>
|
||||
<source>Specifies how many times the viewed line thickness must be applied to cut lines</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>arch</name>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="50"/>
|
||||
<location filename="InitGui.py" line="86"/>
|
||||
<source>Arch tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="51"/>
|
||||
<location filename="InitGui.py" line="87"/>
|
||||
<source>Draft tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="53"/>
|
||||
<source>Architecture</source>
|
||||
<location filename="InitGui.py" line="88"/>
|
||||
<source>Draft mod tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="52"/>
|
||||
<source>Tools</source>
|
||||
<location filename="InitGui.py" line="91"/>
|
||||
<source>&Architecture</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="54"/>
|
||||
<source>Draft</source>
|
||||
<location filename="InitGui.py" line="89"/>
|
||||
<source>Conversion Tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="90"/>
|
||||
<source>Calculation Tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="93"/>
|
||||
<source>&Draft</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="93"/>
|
||||
<source>Context Tools</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="InitGui.py" line="127"/>
|
||||
<source>pycollada not found, collada support will be disabled.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
|
@ -224,6 +224,75 @@
|
|||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>2D rendering</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="Gui::PrefCheckBox" name="gui::prefcheckbox_4">
|
||||
<property name="toolTip">
|
||||
<string>Show debug information during 2D rendering</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show renderer debug messages</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>ShowVRMDebug</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Arch</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Cut areas line thickness ratio</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<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>
|
||||
<item>
|
||||
<widget class="Gui::PrefDoubleSpinBox" name="gui::prefdoublespinbox">
|
||||
<property name="toolTip">
|
||||
<string>Specifies how many times the viewed line thickness must be applied to cut lines</string>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>2.000000000000000</double>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>CutLineThickness</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Arch</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
@ -257,6 +326,11 @@
|
|||
<extends>QCheckBox</extends>
|
||||
<header>Gui/PrefWidgets.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>Gui::PrefDoubleSpinBox</class>
|
||||
<extends>QDoubleSpinBox</extends>
|
||||
<header>Gui/PrefWidgets.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#***************************************************************************
|
||||
|
||||
import FreeCAD, Mesh, os, numpy
|
||||
from DraftTools import translate
|
||||
|
||||
__title__="FreeCAD Collada importer"
|
||||
__author__ = "Yorik van Havre"
|
||||
|
@ -36,7 +37,7 @@ def checkCollada():
|
|||
try:
|
||||
import collada
|
||||
except:
|
||||
FreeCAD.Console.PrintError("pycollada not found, no collada support.\n")
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","pycollada not found, no collada support.\n")))
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
@ -70,7 +71,7 @@ def decode(name):
|
|||
try:
|
||||
decodedName = (name.decode("latin1"))
|
||||
except UnicodeDecodeError:
|
||||
print "ifc: error: couldn't determine character encoding"
|
||||
FreeCAD.Console.PrintError(str(translate("Arch","Error: Couldn't determine character encoding")))
|
||||
decodedName = name
|
||||
return decodedName
|
||||
|
||||
|
@ -148,4 +149,4 @@ def export(exportList,filename):
|
|||
colmesh.scenes.append(myscene)
|
||||
colmesh.scene = myscene
|
||||
colmesh.write(filename)
|
||||
print "file ",filename," successfully created."
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","file %s successfully created.")) % filename)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#***************************************************************************
|
||||
|
||||
import ifcReader, FreeCAD, Arch, Draft, os, sys, time, Part, DraftVecUtils
|
||||
from DraftTools import translate
|
||||
|
||||
__title__="FreeCAD IFC importer"
|
||||
__author__ = "Yorik van Havre"
|
||||
|
@ -79,7 +80,7 @@ def decode(name):
|
|||
try:
|
||||
decodedName = (name.decode("latin1"))
|
||||
except UnicodeDecodeError:
|
||||
print "ifc: error: couldn't determine character encoding"
|
||||
FreeCAD.Console.PrintError(str(translate("Arch", "Error: Couldn't determine character encoding\n")))
|
||||
decodedName = name
|
||||
return decodedName
|
||||
|
||||
|
@ -101,7 +102,7 @@ def getIfcOpenShell():
|
|||
global IfcImport
|
||||
import IfcImport
|
||||
except:
|
||||
print "Couldn't import IfcOpenShell"
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","Couldn't locate IfcOpenShell\n")))
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
@ -117,7 +118,7 @@ def read(filename):
|
|||
if DEBUG: print "opening",filename,"..."
|
||||
ifc = ifcReader.IfcDocument(filename,schema=schema,debug=DEBUG)
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning("IFC Schema not found, IFC import disabled.\n")
|
||||
FreeCAD.Console.PrintWarning(str(translate("Arch","IFC Schema not found, IFC import disabled.\n")))
|
||||
return None
|
||||
t2 = time.time()
|
||||
if DEBUG: print "Successfully loaded",ifc,"in %s s" % ((t2-t1))
|
||||
|
@ -419,7 +420,8 @@ def getShape(obj):
|
|||
m[1], m[4], m[7], m[10],
|
||||
m[2], m[5], m[8], m[11],
|
||||
0, 0, 0, 1)
|
||||
sh.Placement = FreeCAD.Placement(mat)
|
||||
sh.Placement = FreeCAD.Placement(mat)
|
||||
if DEBUG: print "getting Shape from ",obj
|
||||
return sh
|
||||
|
||||
def getWire(entity,placement=None):
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#***************************************************************************
|
||||
|
||||
import FreeCAD, DraftGeomUtils, Part, Draft
|
||||
from DraftTools import translate
|
||||
|
||||
p = Draft.precision()
|
||||
|
||||
|
@ -91,7 +92,7 @@ def export(exportList,filename):
|
|||
for f in flist:
|
||||
outfile.write("f" + f + "\n")
|
||||
outfile.close()
|
||||
FreeCAD.Console.PrintMessage("successfully written "+filename)
|
||||
FreeCAD.Console.PrintMessage(str(translate("Arch","successfully written "))+filename)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samevoeging</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samevoeging</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samevoeging</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samevoeging</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Beperking met 'n as...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Beperking met 'n as...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definieer 'n bewegingsbeperking tussen twee voorwerpe met 'n as</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Samevoeging</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Samevoeging</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Baugruppe</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Baugruppe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Baugruppe</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Baugruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Achseneinschränkung...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Achseneinschränkung...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Festlegen der Achsen-Einschränkung zwischen zwei Objekten</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Festlegen der Achsen-Einschränkung zwischen zwei Objekten</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Baugruppe</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Baugruppe</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ensamblaje</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ensamblaje</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ensamblaje</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ensamblaje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Restricción de eje...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Restricción de eje...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definir una restricción de eje entre dos objetos</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definir una restricción de eje entre dos objetos</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Ensamblaje</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Ensamblaje</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Kokoonpano</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Kokoonpano</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Kokoonpano</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Kokoonpano</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Akseli rajoite...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Akseli rajoite...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>aseta akselirajoite kahden kohteen välille</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>aseta akselirajoite kahden kohteen välille</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Kokoonpano</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Kokoonpano</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblage</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblage</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblage</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Contrainte axiale...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Contrainte axiale...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>définir une contrainte axiale entre deux objets</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>définir une contrainte axiale entre deux objets</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblage</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Assemblage</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montaža</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montaža</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montaža</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montaža</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ograničena osovina...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ograničena osovina...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>postaviti ograničenja osovine između dva objekta</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>postaviti ograničenja osovine između dva objekta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Montaža</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Montaža</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Összeállítás</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Összeállítás</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Összeállítás</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Összeállítás</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Tengely menti kötés...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Tengely menti kötés...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>tengely kötést hoz létre két tárgy között</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>tengely kötést hoz létre két tárgy között</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Összeállítás</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Összeállítás</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assembly</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assembly</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assembly</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assembly</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Vincolo assiale...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Vincolo assiale...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Imposta un vincolo assiale tra due oggetti</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Imposta un vincolo assiale tra due oggetti</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Assembly</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Assembly</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>アセンブリ</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>アセンブリ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>アセンブリ</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>アセンブリ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>軸拘束の設定...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>軸拘束の設定...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>二つのオブジェクト間に軸拘束を設定します。</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>二つのオブジェクト間に軸拘束を設定します。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>アセンブリ</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">アセンブリ</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samenstelling</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samenstelling</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samenstelling</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Samenstelling</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>As-beperking...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>As-beperking...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Stel een as-beperking tussen twee objecten in</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Stel een as-beperking tussen twee objecten in</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Samenstelling</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Samenstelling</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montering</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montering</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montering</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Montering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Aksellås...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Aksellås...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>sett en aksellås mellom to objekter</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>sett en aksellås mellom to objekter</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Montering</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Montering</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Złożenie</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Złożenie</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Złożenie</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Złożenie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ograniczenie osi ...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ograniczenie osi ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>ustaw oś graniczną między dwoma obiektami</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>ustaw oś graniczną między dwoma obiektami</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Złożenie</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Złożenie</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblagem</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblagem</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblagem</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblagem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Restrição de eixo...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Restrição de eixo...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definir uma restrição de eixo entre dois objetos</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>definir uma restrição de eixo entre dois objetos</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Assemblagem</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Assemblagem</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Сборка</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Сборка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Сборка</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Сборка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ограничение оси...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Ограничение оси...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>задать ось, ограниченную двумя объектами</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>задать ось, ограниченную двумя объектами</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Сборка</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Сборка</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ihopsättning</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ihopsättning</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ihopsättning</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Ihopsättning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Begränsningsaxel...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Begränsningsaxel...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Sätt en axelbegränsning mellan två objekt</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>Sätt en axelbegränsning mellan två objekt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Ihopsättning</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Ihopsättning</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Збірка</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Збірка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Збірка</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>Збірка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Обмеження осі...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>Обмеження осі...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>задати вісь обмежену двома об'єктами</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>задати вісь обмежену двома об'єктами</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>Збірка</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">Збірка</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1,35 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS>
|
||||
<context>
|
||||
<TS version="2.0">
|
||||
<context>
|
||||
<name>AssemblyGui::Workbench</name>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>装配</translation>
|
||||
<location filename="../../Workbench.cpp" line="+50"/>
|
||||
<source>Assembly</source>
|
||||
<translation>装配</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>CmdAssemblyConstraintAxle</name>
|
||||
<message>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>装配</translation>
|
||||
<location filename="../../Command.cpp" line="+42"/>
|
||||
<source>Assembly</source>
|
||||
<translation>装配</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>约束轴...</translation>
|
||||
<location line="+1"/>
|
||||
<source>Constraint Axle...</source>
|
||||
<translation>约束轴...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>两个对象之间设置轴约束</translation>
|
||||
<location line="+1"/>
|
||||
<source>set a axle constraint between two objects</source>
|
||||
<translation>两个对象之间设置轴约束</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
</context>
|
||||
<context>
|
||||
<name>Workbench</name>
|
||||
<message>
|
||||
<source>Assembly</source>
|
||||
<translation>装配</translation>
|
||||
<source>Assembly</source>
|
||||
<translation type="obsolete">装配</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
|